Como autenticar o usuário do Game Center no servidor node.j de terceiros

Estou tentando obter o novo método iOS Game Center GKPlayer,generateIdentityVerificationSignatureWithCompletionHandler, trabalhando para que possamos confiar com segurança nas credenciais do Game Center para autenticação. Estamos usando o Node.js como servidor back-end e estou tentando verificar a assinatura, mas sem sucesso.

Aqui está o código que eu tenho no servidor - se houver alguém que possa comentar o que está faltando, isso seria apreciado. A pergunta foi respondida um pouco aqui:Como autenticar o GKLocalPlayer no meu 'servidor de terceiros'?, mas o Node.js não foi abordado especificamente. Observe que o código abaixo não garante a validade do certificado com uma autoridade de assinatura (ainda).

    //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);
            }
        });
    });

Uma coisa que descobri usando o módulo de criptografia no node.js é que ele parece querer o certificado no formato PEM, e acredito que o formato recuperado da Apple seja o DER. Até descobrir como converter o arquivo DER para PEM, eu o convertei temporariamente usando

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

O principal para mim é poder validar a assinatura primeiro. A conversão do certificado e a verificação contra uma autoridade de assinatura ocorrerão mais tarde :)

EDITAR: Eu descobri - eu estava fazendo o hash do playerId, bundleId, timestamp e salt e, em seguida, usando o valor do hash como informações para verificar. Eu precisava apenas colocar essas informações no verificador para verificar sem o hash SHA-1 (já que o verificador cuidará disso). Eu modifiquei o código acima para "fazê-lo funcionar". Espero que isso ajude qualquer um que se depare com isso.

questionAnswers(3)

yourAnswerToTheQuestion