我在这里尝试使用谷歌OAuth来验证我的节点快递应用程序中的用户.我可以成功执行OAuth,它会返回如下响应:
{
access_token: 'token string',
id_token: 'id.string',
expires_in: 3599,
token_type: "Bearer"
}
Run Code Online (Sandbox Code Playgroud)
这一切都有道理,但我不能为我的生活弄清楚如何解码JWT.我对这一切都缺乏经验,所以这对我来说有点陌生.
按照此处列出的说明操作:https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken我正在尝试在我的节点应用中本地解码JWT.
我在我的节点环境中安装了https://github.com/hokaccha/node-jwt-simple.
而且我很确定我需要使用这个证书(https://www.googleapis.com/oauth2/v1/certs)以某种方式解码它,但我在这里有点不知所措.我真的不明白我如何将证书带入我的节点应用程序,之后如何将它与node-jwt-simple一起使用.而且我也不太了解我何时需要提取新证书,而不是使用缓存证书.
那些有经验的人可以帮助我吗?
谢谢你的帮助.我现在完全不知所措.
**更新**
所以我取得了一些进展......有点儿.通过调用jwt.decode(id_token,certificate,true); 我能够成功解码令牌.即使证书var是一个空对象{}.这给我留下了3个问题.1:使用谷歌网址将证书送入我的快递应用程序的最佳方法是什么?2:我怎么知道何时需要提供它的新版本?3:似乎传递给noVerify(jwt.decode中的第3个arg)的真实是一个糟糕的主意.如何在不通过的情况下实现这一目标?看起来似乎jwt-simple期待hs256并且令牌正在使用rs256.
再一次,我对此缺乏经验,所以我可能会离开这里.
*更新* 感谢Nat的帮助,我得到了这个工作!我想我尝试了每一个JWT和JWS节点模块.我最终登陆的内容如下:我发现我所看到的所有模块都没有完全符合我的想法.我创建了以下jwt解码辅助方法,我用它来解码id_token,所以我可以从标题中获取孩子.
module.exports = {
decodeJwt: function (token) {
var segments = token.split('.');
if (segments.length !== 3) {
throw new Error('Not enough or too many segments');
}
// All segment should be base64
var headerSeg = segments[0];
var payloadSeg = segments[1];
var signatureSeg = segments[2];
// base64 decode and parse …Run Code Online (Sandbox Code Playgroud)