我以推荐的格式Authorization: Bearer <token>
发送标题。
从外观上看,令牌字符串'Bearer: <token>'
不是令牌,但需要首先删除'Bearer: '
子字符串才能获取令牌字符串。
我想知道,如果通常的做法是从代码中手动删除它,例如:
const token = authHeaderValue.replace('Bearer: ', '')
在解码和验证之前?
为什么我的自定义应用程序中需要此'Bearer: '
字符串?
答案 0 :(得分:9)
HTTP Authorization
标头中的值Bearer
表示身份验证方案,就像Basic
和Digest
一样。它在RFC 6750中定义。
应用程序可以支持多种身份验证方案,因此建议首先检查身份验证方案。
在基于令牌的身份验证中,首先确保Authorization
标头包含Bearer
字符串后跟空格。如果没有,拒绝请求。如果找到Bearer
后跟空格,则提取必须位于空格字符后面的标记。
有关Bearer
身份验证方案的详细信息,请参阅此answer。
答案 1 :(得分:2)
我使用这种技术。
let token = req.headers['x-access-token'] || req.headers['authorization'];
// Express headers are auto converted to lowercase
if (token.startsWith('Bearer ')) {
// Remove Bearer from string
token = token.slice(7, token.length).trimLeft();
}
if (token) {
jwt.verify(token, config.secret, (err, decoded) => {
if (err) {
return res.json({
success: false,
message: 'Token is not valid'
});
} else {
req.decoded = decoded;
next();
}
});
在这里,我们要剥离JWT前面的任何Bearer字符串。切片7删除了至少7个字符“ Bearer”,并且如果包括其他空格,trimStart会照顾好它。
答案 2 :(得分:0)
身份验证标头请求具有IETF中定义的格式。
即。身份验证:
类型包括以下内容:Bearer,error_code,error_description。
我们可以通过','字符分隔一次发送几种类型。
承载是一种身份验证访问类型。
答案 3 :(得分:0)
我使用split函数提取token
const bearerHeader = req.headers['authorization'];
if(! bearerHeader ){
return res.sendStatus(403);
}
else
{
const bearerToken = bearerHeader.split(' ')[1];
let data = await jwt.verify(bearerToken,secretkey);
}