记录一下在项目中遇到的关于JWT的问题
1. 前端请求中携带了token,但仍提示401 Unauthorized
原因分析
在JWT的官方文档中,我们可以找到以下信息
可以发现,JWT推荐的格式就是Authorization: <type> <authorization-parameters>的形式。
同时我们可以查阅MDN文档中关于HTTP认证-身份验证方案的部分,里面就有提到常见的验证方案:
- Basic:用于
http-basic认证,使用了base64作为编码凭据。安全性很差,但得到了广泛的支持且易于设置; - Bearer:用于访问使用
OAuth2.0保护的资源;常见于 OAuth 和 JWT 授权; - Digest:Firefox 93 及更高版本支持 SHA-256 算法,以前的版本仅支持MD5散列(不建议)
- HOBA:阶段三,HTTP Origin-Bound 认证,基于数字签名
- AWS4-HMAC-SHA256:此方案用于 AWS3 服务器验证
解决方案
根据以上规范,我们可以发现报错的原因是我们没有缺少了Authorization: <type> <authorization-parameters>的<type>部分,导致发送了一个不规范的标头。所以只要在前端封装的请求方法的请求拦截中添加Bearer 前缀就可以了
config.headers['Authorization'] = `Bearer ${Authorization}`