在此问题的工作基础上:What is the proper way to validate google granted OAuth tokens in a node.js server?
我可以使用jwcrypto库来验证node.js服务器中的Google OAuth2令牌吗?我拥有Google提供的857字节令牌,该令牌在https://www.googleapis.com/oauth2/v1/tokeninfo?id_token=
使用Google的网络端点进行验证。从理论上讲,我可以使用令牌加上谷歌提供的证书here他们看起来像这样:
{
859c1234d08e008cc261ff11de5f8da1b8c4d490: "-----BEGIN CERTIFICATE----- <stuff> -----END CERTIFICATE----- ",
ad2a50cb70c5da789ee26d05b8f621a99e81202e: "-----BEGIN CERTIFICATE----- <stuff> -----END CERTIFICATE----- "
}
到目前为止,我甚至无法使用loadPublicKey方法将密钥加载到jwcrypto中。据推测,一旦我开始工作,我可以调用验证方法。这是否有任何在线工作的例子?
答案 0 :(得分:4)
我刚刚添加了一个新的npm模块,用于解码和验证Google的id_token。您可以在此处找到代码:https://github.com/gmelika/google-id-token
用法相当简单:
var googleIdToken = require('google-id-token');
var parser = new googleIdToken({ getKeys: getGoogleCerts });
parser.decode(sampleGoogleIDToken, function(err, token) {
if(err) {
console.log("error while parsing the google token: " + err);
} else {
console.log("parsed id_token is:\n" + JSON.stringify(token));
}
});
上面引用的getGoogleCerts
函数是用户提供的函数,它将根据提供的密钥返回相应的Google证书。一个非常基本的例子是:
var request = require('request');
function getGoogleCerts(kid, callback) {
request({uri: 'https://www.googleapis.com/oauth2/v1/certs'}, function(err, response, body){
if(err && response.statusCode !== 200) {
err = err || "error while retrieving the google certs";
console.log(err);
callback(err, {})
} else {
var keys = JSON.parse(body);
callback(null, keys[kid]);
}
});
}
显然你想在那里添加缓存。随意使用您喜欢的缓存机制来做到这一点。
希望有所帮助。
答案 1 :(得分:3)
不太可能工作,我们还没有测试过这个用例,我们现在定制了jwcrypto中的公钥格式,等待JWK完全标准化。