使用Auth0为对接Angular的NestJS API做鉴权时受保护路由返回401如何解决
排查步骤
补充说明:你观察到Auth0后台无失败日志属于正常现象,RS256算法的JWT验证是Nest服务本地通过JWKS公钥完成的,不需要发起请求到Auth0服务,因此不会产生相关日志。
- 首先确认jwksUri配置正确
你当前代码中jwksUri的拼接写法容易出错,要确保最终生成的地址和Auth0后台给出的JWKS地址完全一致,你可以在构造函数里打印jwksUri的实际值确认没有拼接错误,比如多了多余字符、少了斜杠的问题。如果jwks地址无法正常访问,会直接导致验证失败,不会进入validate方法。 - 检查audience和issuer配置和token字段完全匹配
解析你请求用的token,确认以下三个字段完全对齐:- token的
alg字段值为RS256,和你配置的algorithms数组一致 - token的
aud字段值和你代码里填的audience完全一致,包括末尾的斜杠、大小写都不能有差异,这个值要和你Auth0后台创建API时填写的标识符完全相同 - token的
iss字段值和你代码里填的issuer完全一致,同样要注意末尾斜杠的问题
- token的
- 确认JwtStrategy正确注册
检查你的Auth模块是否将JwtStrategy加入了providers数组,同时AppModule是否正确导入了AuthModule、PassportModule相关依赖,没有漏加依赖导致策略未生效。 - 验证请求头格式正确
发起请求时必须携带Authorization请求头,格式为Bearer 你的完整token,注意Bearer和token之间必须有一个空格,不能漏写。 - 检查全局路由前缀配置
你测试的接口地址是http://localhost:3333/api/hello,要确认你是否在Nest中配置了全局路由前缀api,如果未配置该前缀,你请求的地址实际不存在,返回404,若你收到的是401响应可跳过该检查。
内容的提问来源于stack exchange,提问作者pjlamb12
相关产品推荐
相关产品推荐

