【问题标题】:Access token does not include scopes declared in Identity Server 4访问令牌不包括 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" }
};

调用将我的代码交换为令牌的调用会生成一个有效的访问令牌,但仅包含 openidoffline_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 questionthis one 中的设置非常相似,尽管它们处理的问题不同。不过,声明的范围显示为包含在响应中。

起初我认为这可能与我的测试用户的定义有关,但那里没有任何关于声明的内容,我能看到的最接近的是声明。但我不依赖我范围内的声明,所以这是一条死胡同。

我迷路了,不知道如何进一步排除故障。 ids4 访问令牌范围不包括的谷歌搜索变化很少。

【问题讨论】:

    标签: c# identityserver4 access-token


    【解决方案1】:

    我不是很喜欢回答我自己的问题,但有时需要。

    显然,IDS4 中有一个错误(或者,至少在the documentation 中有一个非常不清楚的地方)。声明如下。

    范围
    一个或多个注册范围。如果未指定,则会为所有明确允许的范围颁发令牌。

    这是不正确的,因此我的困惑导致了这个问题。


    现在,如果我要为 IDS4 文档辩护,it is said 还需要该参数是授权(不是交换或续订)请求所必需的。

    范围
    一个或多个注册范围(必需)。

    现在,除了明显的差异并列在不同的页面上之外,如果我们将明确允许的范围解释为授权期间引用的范围,而不是服务器的客户端、API 范围/资源中引用的范围,那么是的,文档没有错。但从我的立场来看,这是对 spagat 的深入探讨,以使这一点看起来似是而非。

    【讨论】:

      猜你喜欢
      • 2017-05-14
      • 1970-01-01
      • 2018-06-01
      • 2020-12-07
      • 1970-01-01
      • 2018-02-21
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多