jwt 服务器端认证 JsonWebTokenError
Posted
技术标签:
【中文标题】jwt 服务器端认证 JsonWebTokenError【英文标题】:jwt server side authentication JsonWebTokenError 【发布时间】:2016-08-25 07:00:18 【问题描述】:我正在尝试进行一些服务器端身份验证。
在服务器端登录()
var jwt = require('jsonwebtoken');
....
if (user.hash != hash(pass, user.salt))
return invalid("Wrong password");
var token = jwt.sign(user, 'superSecret');
res.json(
success: true,
message: '',
auth_token: token
);
在客户端http
createHero(hero: Hero)
let body = JSON.stringify( hero );
let headers = new Headers( 'Content-Type': 'application/json' );
let authToken = localStorage.getItem('auth_token');
headers.append('Authorization', `Bearer $authToken`);
let options = new RequestOptions( headers: headers );
this.http.post(`$this._baseUrlcreate/`, body, options)
.map(response => response.json())
.subscribe(data =>
this._dataStore.heroes.push(data);
this._dataStore.hero = data;
this._heroObserver.next(this._dataStore.hero);
,
error => this.handleError('Could not create hero.')
);
在服务器端验证
var token = req.headers.authorization;
var h = req.headers;
// decode token
if (token)
// verifies secret and checks exp
aaa = jwt.verify(token, 'superSecret', function(err, decoded)
console.log(decoded);
if (err)
return res.json( success: false, message: 'Failed to authenticate token on API server.' );
else
// if everything is good, save to request for use in other routes
req.decoded = decoded;
next();
);
console.log(aaa);
else
// if there is no token return an error
return res.status(403).send(
success: false,
message: 'No token provided.'
);
我在服务器上正确获取了令牌。授权:“承载......”
但它无法验证。我得到了 JsonWebTokenError 无效的令牌。
谁能帮忙指出我错过了什么?
【问题讨论】:
【参考方案1】:sign() 和 verify() 都有同步和异步版本。 sign() 同步产生一个令牌字符串,异步产生一个令牌对象。我使用了 sign() 的同步版本,所以我需要使用同步版本来解码字符串的令牌。像这样
if (token)
try
var decoded = jwt.verify(token, 'superSecrete');
catch (err)
return res.json( success: false, message: 'Failed to authenticate token on API server.' );
req.decoded = decoded;
next();
else
return res.status(403).send(
success: false,
message: 'No token provided.'
);
【讨论】:
以上是关于jwt 服务器端认证 JsonWebTokenError的主要内容,如果未能解决你的问题,请参考以下文章
后端架构token授权认证机制:spring security JSON Web Token(JWT)简例