【问题标题】:What Scopes Required For UserInfo Endpoint - Besides 'openid'?UserInfo 端点需要哪些范围 - 除了“openid”?
【发布时间】:2017-07-04 04:32:28
【问题描述】:

我正在使用带有 .NET Core 的 IdentityServer 4。

我可以使用授权类型 ResourceOwnerPassword ('password') 成功登录,然后我立即调用 UserInfo 端点。该调用失败,当我检查服务器日志时,我看到:

  • '范围验证失败。返回 403' 和
  • '在当前主体上找到的范围:范围:openid,范围:配置文件,范围:角色,范围:api1,范围:offline_access'

文档说'至少需要 openid 范围',日志显示我有,但文档还说,就在此之前,'...取决于授予的范围...' - 什么范围?在哪里指定 UserInfo 端点所需的范围?我假设我错过了它/他们,但不知道是什么。我有正确的范围来成功命中令牌端点 (/connect/token),但没有正确的范围来成功调用 userinfo 端点 (/connect/userinfo)。

谁能帮忙?

谢谢!

嗡嗡声

【问题讨论】:

    标签: identityserver4


    【解决方案1】:

    userinfo 端点对openid 范围有最低要求。

    这是证明这一点的测试:

    https://github.com/IdentityServer/IdentityServer4/blob/dev/test/IdentityServer.IntegrationTests/Clients/UserInfoClient.cs#L41

    【讨论】:

    • 我不是质疑 openid 的最低要求;正如我在帖子中所说,我已经有了 openid 范围,我想知道 openid 的 addition 需要什么范围。正如您的文档中提到的那样,“......取决于授予的范围......”。我认为这意味着可能还需要一些其他范围,因为我有 openid 并且收到错误“范围验证失败”
    • 我要说的是,当您将包含 openid 范围的令牌发送到 userinfo 时,它将被接受(无论您发送了哪些其他范围)。你似乎说情况并非如此。您是如何在配置中定义 openid 范围的?
    【解决方案2】:

    好的,我想通了 - 我在调用 UserInfo 端点时缺少 AllowedScope。当我在 Startup.Configure() 方法中添加范围时,它起作用了:

        app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions 
        {
           Authority = "http://localhost:5000/",
           AllowedScopes = { "api1", "WebAPI" },
           RequireHttpsMetadata = false
        });
    

    我不明白的是登录本身是如何工作的。范围在登录调用(/connect/token)时发送 - 并且成功。我认为这些范围是用于身份验证的,因为这里这个类的名称是“..AuthenticationOptions”。我的猜测是这些选项是during 登录而不是for 登录,并且它们仅在您外出访问资源时使用,例如/connect/userinfo。也许知道的人可以证实这一点。

    感谢您的帮助!

    嗡嗡声

    【讨论】:

      猜你喜欢
      • 2015-10-09
      • 2018-08-11
      • 2019-07-28
      • 2018-07-08
      • 2017-12-12
      • 2022-10-08
      • 2015-04-22
      • 2016-01-23
      • 2017-02-09
      相关资源
      最近更新 更多