访问令牌不包括 Identity Server 4 中声明的范围
Posted
技术标签:
【中文标题】访问令牌不包括 Identity Server 4 中声明的范围【英文标题】:Access token does not include scopes declared in Identity Server 4 【发布时间】:2021-10-01 06:57:26 【问题描述】:大致遵循Scott's 指南,我让它与授权代码流一起工作。但是,当我调查众所周知的时,我看到 junky_scope 被列为受支持。我的客户端和 API 范围/资源声明如下。访问令牌中的声明将基于IDS4's GitHub 规定的 API 范围。
public static IEnumerable<ApiScope> Obtain()
yield return new ApiScope("junky_scope", "Junky Scope"); ...
yield return new ApiResource
Name = "blopp", ...
Scopes = new List<string> "awesome_scope", "junky_scope", ...
;
yield return new Client
ClientId = "spa_client",
AllowOfflineAccess = true,
AllowedGrantTypes = GrantTypes.Code, ...
AllowedScopes = new List<string> "openid", "awesome_scope", "junky_scope"
;
调用将我的代码交换为令牌的调用会生成一个有效的访问令牌,但仅包含 openid 和 offline_access 范围。使用刷新令牌请求新令牌时也是如此。在正文中传递的有效负载如下所示。我尝试不指定 范围 来获取所有受支持的令牌(如承诺的 in the docs),但没有成功。
client_id=spa_client &scope=junky_scope &redirect_uri=http://localhost:44304/beep &code=205D...EDBF &grant_type=authorization_code
设置与this question 和this one 中的设置非常相似,尽管它们处理的问题不同。不过,声明的范围显示为包含在响应中。
起初我认为这可能与我的测试用户的定义有关,但那里没有任何关于声明的内容,我能看到的最接近的是声明。但我不依赖我范围内的声明,所以这是一条死胡同。
我迷路了,不知道如何进一步排除故障。 ids4 访问令牌范围不包括的谷歌搜索变化很少。
【问题讨论】:
【参考方案1】:我不是很喜欢回答我自己的问题,但有时需要。
显然,IDS4 中有一个错误(或者,至少在the documentation 中有一个非常不清楚的地方)。声明如下。
范围一个或多个注册范围。如果未指定,则会为所有明确允许的范围颁发令牌。
这是不正确的,因此我的困惑导致了这个问题。
现在,如果我要为 IDS4 文档辩护,it is said 还需要该参数是授权(不是交换或续订)请求所必需的。
范围一个或多个注册范围(必需)。
现在,除了明显的差异并列在不同的页面上之外,如果我们将明确允许的范围解释为授权期间引用的范围,而不是服务器的客户端、API 范围/资源中引用的范围,那么是的,文档没有错。但从我的立场来看,这是对 spagat 的深入探讨,以使这一点看起来似是而非。
【讨论】:
以上是关于访问令牌不包括 Identity Server 4 中声明的范围的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法撤销另一个用户的访问令牌并结束他们在 Identity Server 4 中的会话?
JWT 不记名令牌不适用于 ASP.Net Core 3.1 + Identity Server 4
Identity Server4学习系列四之用户名密码获得访问令牌
Identity Server 4 没有可用于令牌的安全令牌验证器