使用NodeJS验证包含“Bearer:”的JWT标记字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用NodeJS验证包含“Bearer:”的JWT标记字符串相关的知识,希望对你有一定的参考价值。

我以推荐形式Authorization: Bearer <token>发送标题。

看起来,令牌字符串('Bearer: <token>')不是令牌,但需要首先删除'Bearer: 'substring以获取令牌字符串本身。

我想知道,如果通常的做法是从代码中手动删除它,如下所示:

const token = authHeaderValue.replace('Bearer: ', '')

在解码和验证之前?

为什么我的自定义应用程序中需要这个'Bearer: '字符串?

答案

HTTP Bearer标头中的值Authorization表示身份验证方案,就像BasicDigest一样。它在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。

我们可以通过','字符分隔一次发送几种类型。

承载是一种身份验证访问类型。

参考:https://tools.ietf.org/html/rfc6750#page-14

以上是关于使用NodeJS验证包含“Bearer:”的JWT标记字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用 JWT Bearer 令牌进行身份验证 Swagger

如何使用 OWIN Jwt Bearer Authentication 记录身份验证结果

使用 .NET Core 中的公共安全密钥配置 JWT Bearer 令牌验证

使用 JWT Bearer 进行身份验证不起作用,调试表明问题出在 GetToken() 函数内部

Bearer Token 认证和 JWT

使用 ADFS 的 JWT Bearer 身份验证将 ASP.NET Framework 迁移到 ASP.NET Core 3.1