IdentityServer4返回的AccessToken未包含已声明scopes如何排查
排查步骤
- 首先确认授权请求阶段是否传递了所需scope:授权码流中,授权码本身会绑定首次请求
/connect/authorize端点时用户同意的scope,后续调用token端点兑换令牌时传递的scope不能超出授权阶段授予的范围。你当前只在兑换token时传了junky_scope,如果授权跳转时没有携带该scope,兑换阶段会直接过滤掉该scope。 - 检查服务注册逻辑是否完整:确认你的Startup/Program文件中,同时调用了
AddInMemoryApiScopes()和AddInMemoryApiResources()方法,分别传入你定义的ApiScope集合和ApiResource集合,IdentityServer4要求两类资源都完成注册才能正确识别自定义scope,缺任一都会导致scope被静默过滤。 - 排查自定义扩展逻辑:如果你实现了
ICustomTokenRequestValidator、IScopeValidator这类自定义校验扩展,先暂时注释掉相关逻辑再测试,避免自定义代码误过滤了目标scope。 - 开启Debug日志定位根因:将IdentityServer4的日志级别调整为Debug,兑换token时查看日志输出,会明确标注每个scope被过滤的具体原因(比如客户端无权限、未授予、资源未注册等),是最高效的排查手段。
如果你测试时选择跳过用户同意页面,也要确认你的客户端配置中没有默认过滤自定义scope的相关配置,同时授权请求的scope参数用空格分隔多个值,不要用其他分隔符。
内容的提问来源于stack exchange,提问作者Konrad Viltersten
相关产品推荐
相关产品推荐

