我以推荐形式Authorization: Bearer <token>
发送标题。
看起来,令牌字符串('Bearer: <token>'
)不是令牌,但需要首先删除'Bearer: '
substring以获取令牌字符串本身。
我想知道,如果通常的做法是从代码中手动删除它,如下所示:
const token = authHeaderValue.replace('Bearer: ', '')
在解码和验证之前?
为什么我的自定义应用程序中需要这个'Bearer: '
字符串?
HTTP Bearer
标头中的值Authorization
表示身份验证方案,就像Basic
和Digest
一样。它在RFC 6750中定义。
应用程序可以支持多种身份验证方案,因此始终建议首先检查身份验证方案。
在基于令牌的身份验证中,首先确保Authorization
标头包含Bearer
字符串,后跟空格。如果没有,拒绝请求。如果找到Bearer
后跟一个空格,则提取必须位于空格字符后面的标记。
有关answer身份验证方案的更多详细信息,请参阅此Bearer
。
我用这种技术。
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字符串。 Slice 7删除了至少7个字符的'Bearer',如果包含额外的空格,trimStart会处理它。
身份验证标头请求具有IETF中定义的格式。
即认证:
类型包括以下内容:Bearer,error_code,error_description。
我们可以通过','字符分隔一次发送几种类型。
承载是一种身份验证访问类型。