#JWT 在NestJS项目中接入时遇到的问题

275 阅读1分钟

记录一下在项目中遇到的关于JWT的问题

1. 前端请求中携带了token,但仍提示401 Unauthorized

image.png

原因分析

JWT的官方文档中,我们可以找到以下信息

image.png

可以发现,JWT推荐的格式就是Authorization: <type> <authorization-parameters>的形式。

同时我们可以查阅MDN文档中关于HTTP认证-身份验证方案的部分,里面就有提到常见的验证方案:

  1. Basic:用于http-basic认证,使用了base64作为编码凭据。安全性很差,但得到了广泛的支持且易于设置;
  2. Bearer:用于访问使用OAuth2.0保护的资源;常见于 OAuth 和 JWT 授权;
  3. Digest:Firefox 93 及更高版本支持 SHA-256 算法,以前的版本仅支持MD5散列(不建议)
  4. HOBA:阶段三,HTTP Origin-Bound 认证,基于数字签名
  5. AWS4-HMAC-SHA256:此方案用于 AWS3 服务器验证

解决方案

根据以上规范,我们可以发现报错的原因是我们没有缺少了Authorization: <type> <authorization-parameters><type>部分,导致发送了一个不规范的标头。所以只要在前端封装的请求方法的请求拦截中添加Bearer 前缀就可以了

config.headers['Authorization'] = `Bearer ${Authorization}`