.NET5 WebAPI使用IdentityServer4.AccessTokenValidation向IdentityServer3验证引用令牌失败
配置项含义说明
ApiName:不是客户端ID,对应IdentityServer3中你创建的API资源的唯一名称,需要和IdentityAdmin中API资源的Name字段完全一致,大小写敏感。ApiSecret:仅使用引用令牌时需要填写,是你给该API资源配置的Secret明文(不需要传入哈希后的值,验证库会自动处理加密逻辑),不要填写客户端的SharedSecret。
核心修复方案
- 填充必填配置
把AddIdentityServerAuthentication中的配置补全:
.AddIdentityServerAuthentication(options => { options.Authority = "{identity server基础地址}"; options.ApiName = "你的API资源在IdentityAdmin中的Name值"; // 必填 options.ApiSecret = "你给该API资源配置的Secret明文"; // 引用令牌必填,JWT令牌可留空 options.LegacyAudienceValidation = true; });
- 确认Scope匹配
验证你请求令牌时传入的scope参数包含api值,同时IdentityServer3中该API资源已关联api这个Scope,避免授权过滤器校验Scope失败。 - 版本兼容性校验
IdentityServer4.AccessTokenValidation需使用3.x及以下版本,更高版本不再兼容IdentityServer3的令牌格式,若你当前使用的是4.x+版本,请降级到3.1.10版本测试。
定位401具体原因的方法
将ASP.NET Core日志中Microsoft.AspNetCore.Authentication类别日志级别调整为Debug,重启服务后再次请求接口,日志会输出401的具体触发原因:是受众校验失败、Scope校验失败还是引用令牌自省请求失败。
内容的提问来源于stack exchange,提问作者daily_driver
相关产品推荐
相关产品推荐

