[英]Verify a JWT token string, containing 'Bearer ' with NodeJS
我以推荐的形式发送标题Authorization: Bearer <token>
。
看起来,令牌字符串,即'Bearer <token>'
,不是令牌,但需要先删除'Bearer '
子字符串以获取令牌字符串本身。
我想知道,从代码中手动删除它是否是一种常规做法,如下所示:
const token = authHeaderValue.replace('Bearer ', '')
在解码和验证之前?
为什么我的自定义应用程序中需要这个'Bearer '
字符串?
我使用这种技术。
// Header names in Express are auto-converted to lowercase
let token = req.headers['x-access-token'] || req.headers['authorization'];
// Remove Bearer from string
token = token.replace(/^Bearer\s+/, "");
if (token) {
jwt.verify(token, config.secret, (err, decoded) => {
if (err) {
return res.json({
success: false,
message: 'Token is not valid'
});
}
req.decoded = decoded;
next();
});
} else {
return res.json({
success: false,
message: 'Token not provided'
});
}
在这里,我们使用正则表达式去除 JWT 前面的任何 Bearer 字符串。 如果包含任何空格,它也会被删除。
HTTP Authorization
标头中的值Bearer
表示身份验证方案,就像Basic
和Digest
。 它在RFC 6750 中定义。
一个应用程序可以支持多种身份验证方案,因此始终建议先检查身份验证模式。
在基于令牌的身份验证中,首先确保Authorization
标头包含后跟空格的Bearer
字符串。 如果没有,拒绝请求。 如果找到后跟空格的Bearer
,则提取必须紧跟在空格字符之后的标记。
有关Bearer
身份验证方案的更多详细信息,请参阅此答案。
身份验证标头请求具有 IETF 中定义的格式。
即认证:
类型包括以下内容:Bearer、error_code、error_description。
我们可以通过用“,”字符分隔来一次发送多种类型。
Bearer 是一种认证访问类型。
我使用拆分功能来提取令牌
const bearerHeader = req.headers['authorization'];
if(! bearerHeader ){
return res.sendStatus(403);
}
else
{
const bearerToken = bearerHeader.split(' ')[1];
let data = await jwt.verify(bearerToken,secretkey);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.