Как аутентифицировать пользователя Game Center с сервера стороннего узла node.js

мы пытались получить новый метод iOS Game Center GKPlayer,generateIdentityVerificationSignatureWithCompletionHandlerработая так, чтобы мы могли надежно полагаться на учетные данные Game Center для аутентификации. Мы'использовать Node.js в качестве внутреннего сервера, и япытался проверить подпись, но безрезультатно.

Вот код на стороне сервера, который у меня есть - если естьЛюбой, кто может вмешиваться в то, чтоотсутствует, этобуду признателен. На вопрос был дан ответ несколько здесь:Как аутентифицировать GKLocalPlayer на моем компьютере?сторонний сервер '?, но Node.js не имеетЭто было специально решено. Обратите внимание, что приведенный ниже код неt обеспечивает действительность сертификата с подписывающим органом (пока).

    //Client sends the payload below
    //json.playerId - UTF-8 string
    //json.bundleId - UTF-8 string
    //json.timestamp - Hex string
    //json.salt - base64 encoded
    //json.publicKeyURL - UTF-8 string
    //json.signature - base64 encoded
    var json = JSON.parse(req.body);
    console.log(JSON.stringify(json));
    //get the certificate
    getCertificate(json.publicKeyURL, function(cert){
        //read file from fs for now, since getCertificate returns cert in DER format
        fs = require('fs');
        fs.readFile('/gc-sb.pem', 'utf8', function (err,data) {
            if (err) {
                console.log(err);
            } else {
                console.log(data);
            var verifier = crypto.createVerify("sha1WithRSAEncryption");
            verifier.write(json.playerId, "utf8");
            verifier.write(json.bundleId, "utf8");
            verifier.write(json.hexTimestamp, "hex");
            verifier.write(json.salt, "base64");
            var isValid = verifier.verify(data, json.signature, "base64");

            console.log("isvalid: " + isValid);
            }
        });
    });

Одна вещь, которую яс помощью модуля crypto в файле node.js мы обнаружили, что ему нужен сертификат в формате PEM, и я считаю, что формат, полученный от Apple, это DER. Пока я не выясню, как преобразовать файл DER в PEM, ямы временно конвертировали его

openssl x509 -in gc-sb.cer -inform der -outform pem -out gc-sb.pem

Для меня главное - сначала проверить подпись. Конвертация сертификата и проверка его по подписывающему органу придут позже :)

РЕДАКТИРОВАТЬ: ЯЯ понял это - я хэшировал playerId, bundleId, timestamp и salt, а затем использовал хешированное значение в качестве информации для проверки. Мне нужно было просто поместить эти фрагменты информации в верификатор для проверки без хэша SHA-1 (так как верификатор позаботится об этом). Я'мы изменили код выше для "сделай так, чтоб это работало", Надеюсь, это поможет любому, кто сталкивается с этим.

Ответы на вопрос(3)

Ваш ответ на вопрос