首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JWT未解码"JWT畸形“-节点角度

JWT未解码"JWT畸形“-节点角度
EN

Stack Overflow用户
提问于 2016-02-13 09:59:12
回答 1查看 31.8K关注 0票数 7

登录后,我向客户端发送一个JSON web令牌。我有一个自定义的authInterceptor,它将JSON web令牌发送回服务器端。

当我登录时,一切都正常。转到不同的子页面,效果很好。这是因为我有一个检查Passport身份验证或令牌身份验证的函数,在登录时Passport身份验证工作。

当我关闭浏览器并返回站点时,JWT无法解码。当JWT被放置在编码函数下时,它可以进行解码。我已经尝试了jwt-simple节点模块和jsonwebtoken节点模块,返回时返回了相同的错误。

这是我的自定义函数,用于检查有效的令牌:

代码语言:javascript
复制
function checkAuthentication(req, res, next){
  if (!req.headers.authorization) {
     return res.status(401).send({ message: 'Please make sure your request has an Authorization header' });
  }
  console.log("Here");
  var token = req.headers.authorization.split('.')[1];
  console.log(token);
  console.log(config.secret);
  var payload = null;
  try {
    console.log("And here....");
    payload = jwt.decode(token, config.secret);
    console.log(payload);
  }
  catch (err) {
    console.log(err);
    return false;
  }

  if (payload.exp <= moment().unix()) {
    return false;
  }
  req.user = payload.sub;
  return true;
}

jwt-simple使用jwt.encode()jwt.decode,jsonwebtoken使用jwt.sign()jwt.verify()。这是我在控制台中得到的:

代码语言:javascript
复制
Here
eyJzdWIiOiI1NmEyZDk3MWQwZDg2OThhMTYwYTBkM2QiLCJleHAiOjE0NTYxOTEyNzQsImlhdCI6MTQ1NTMyNzI3NH0
VerySecretPhrase
And here....
{ [JsonWebTokenError: jwt malformed] name: 'JsonWebTokenError', message: 'jwt malformed' } 

这是客户端的authInterceptor。我收集令牌并将其设置在请求标头中:

代码语言:javascript
复制
app.factory('httpInterceptor', function($q, $store, $window) {
return {
    request: function (config){
        config.headers = config.headers || {};
        if($store.get('token')){
            var token = config.headers.Authorization = 'Bearer ' + $store.get('token');
        }
        return config;
    },
    responseError: function(response){
        if(response.status === 401 || response.status === 403) {
            $window.location.href = "http://localhost:3000/login";
        }
        return $q.reject(response);
    }
};
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-14 22:25:48

很高兴你把它弄清楚了!对于后人来说,问题在于: JWT由三个组件组成,头部、有效负载和签名(a good, thorough explanation can be found in this toptal post),因此当您使用var token = req.headers.authorization.split('.')将JWT拆分成组件时,分配给token的值只引用有效负载,而不是整个JWT。

因为jwt-simple decode方法需要完整的令牌,而您只是给它提供了要评估的有效负载,所以您的代码触发了“jwt错误”错误。在您的示例中,由于您在Authorization中的令牌前面使用了Bearer,因此您可以改为使用var token = req.headers.authorization.split(' ')来获取完整的令牌。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35375215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档