我可以使用jwcrypto来验证Google生成的OAuth2 id_token吗?
Can I use jwcrypto to validate a Google generated OAuth2 id_token?
建立在这个问题的工作:什么是正确的方式来验证谷歌授予OAuth令牌在node.js服务器?
我可以使用jwcrypto库在node.js服务器中验证Google OAuth2令牌吗?我有Google给出的857字节令牌,它使用Google的web端点https://www.googleapis.com/oauth2/v1/tokeninfo?id_token=
进行验证。理论上,我可以使用令牌加上这里可用的谷歌证书,它们看起来像这样:
{
859c1234d08e008cc261ff11de5f8da1b8c4d490: "-----BEGIN CERTIFICATE----- <stuff> -----END CERTIFICATE----- ",
ad2a50cb70c5da789ee26d05b8f621a99e81202e: "-----BEGIN CERTIFICATE----- <stuff> -----END CERTIFICATE----- "
}
到目前为止,我甚至无法使用loadPublicKey方法将密钥加载到jwcrypto中。假设一旦我让这个工作,我可以调用验证方法。网上有这样的例子吗? 我刚刚添加了一个新的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]);
}
});
}
显然你想在那里添加缓存。请随意使用您喜欢的缓存机制。
希望对你有帮助。
不太可能工作,我们还没有测试过这个用例,我们在jwcrypto中的公钥格式现在是自定义的,等待JWK完全标准化。
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- difference between '$(<%= DDL.ID %>) & $('
- 使用Javascript获取所选选项ID
- 根据id将json数组组合为一个json数组
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 对id以某个字符串开头的元素进行计数
- 如果元素's的ID以数字开头
- 通过id和class属性获取元素
- 根据选项卡内部的文本链接中的哈希ID动态选择jqueryUI选项卡
- 使用当前日期生成随机id
- Javascript-ID冲突的几率
- Href:当前DIV中的目标ID
- 无法获取属性'Id'使用Knockout.js的未定义或空引用API
- Javascript复选框函数:;缺少:在属性id之后"
- Twitter引导程序Typeahead-Id&标签
- 如何与特定ID交谈
- chart.series[id].remove()无法刷新高位图表/高位股票中其他系列的图例属性
- 如何在速度模板中获取LiferayPortlet实例id
- 谷歌地图可以't添加正确的标记ID
- 如何将OAuth2客户端id与chrome扩展文件一起分发