如何使自定义scope avm.read被包含在访问令牌的scope数组中?
你需要检查并完成以下几个关键操作:
确认ApiResource与ApiScope的关联
确保你创建的ApiResource「compApi」已将「avm.read」这个ApiScope添加到它的Scopes集合中。仅单独创建ApiScope和ApiResourceScope是不够的,必须让Identity Server明确知晓该scope属于「compApi」这个API资源,才会将其纳入访问令牌。检查客户端的AllowedScopes配置
再次确认客户端配置的AllowedScopes字段中明确包含「avm.read」。即便你将该scope加入了ClientScopes,也需要确保客户端的AllowedScopes列表里有它——这是客户端能够请求该scope的核心前提。确认解析的是正确的令牌类型
你用jwt.io解析的令牌必须是access token,而非id token。id token仅承载身份相关信息(比如openid、profile、email这些身份scope),API权限类的scope(如avm.read)只会出现在access token中。如果请求时只获取了id token,自然看不到这个自定义scope。检查ApiScope的基础属性
确保「avm.read」这个ApiScope的ShowInDiscoveryDocument属性设置为true,这样客户端才能通过发现文档获取并请求该scope;另外,确认其Required属性未被错误设置为true(默认应为false),避免因未满足强制条件导致scope被过滤。验证授权流程中的scope同意状态
如果你的客户端开启了授权同意页面,要确保用户在授权过程中明确同意了「avm.read」这个scope。如果是无需用户同意的客户端,需确认客户端的RequireConsent属性设为false,或已预先配置好默认同意的scope列表。
内容的提问来源于stack exchange,提问作者xeraphim

