oauth-2.0 .NET身份服务器4 OpenId不一致连接

iaqfqrcu  于 2022-10-31  发布在  .NET
关注(0)|答案(1)|浏览(220)

我正在尝试使用IdentityServer,并且一直在密切关注readthedocs上的指南。我正在添加外部身份提供者,并且已经将我想要支持的所有身份提供者添加到IdentityServer项目中。
我特别希望包括“公会”从Discord然后做基于角色的授权在我的网页应用程序中的基础上的角色,用户在一个特定的公会。Discord列出了各种范围,允许:

因此,我包含了AspNet.Security.OAuth.Discord包,并为公会添加了一个IdentityResource:

public static class AuthConfig
{
    public static IEnumerable<IdentityResource> IdentityResources =>
        new List<IdentityResource>
        { 
            new IdentityResources.OpenId(),
            new IdentityResources.Address(),
            new IdentityResources.Email(),
            new IdentityResources.Profile(),
            new  IdentityResource()
            {
                Name = "guilds",
                DisplayName = "Discord Guilds",
                Description = "All of the Discord Guilds the user belongs to",
                Required = true,
                Emphasize = true,
                UserClaims = new[] { "name" } // <<< Not sure how I find the claims on the discord api doco
            }
        };

    .
    .
    .
}

这允许我在启动IdentityServer项目时向discord选项添加作用域:

public void ConfigureServices(IServiceCollection services)
{
    // uncomment, if you want to add an MVC-based UI
    services.AddControllersWithViews();

    services.AddAuthentication()
        .AddDiscord("Discord", options =>
        {
            options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
            options.ClientId = "<my client id>";
            options.ClientSecret = "<my client secret>";
            options.Scope.Add("guilds");
        })

当我登录的时候,uri已经添加了guild作用域,并且我在确认对话框中得到警告:

但是当我查看我的声明的内容时,我什么都看不到。如果我添加一个标准的oidc,其中一个 email 会显示。

如果我一直遵循IdentityResources.Email的定义,则会看到这些声明定义在IdentityServer4.Constants

中的ScopeToClaimsMapping属性上
但我不确定如何确定Discord guilds示波器的这些声明......无论如何,这是问题所在吗?
谁能给我指个方向?

shstlldc

shstlldc1#

声明和作用域是不同但相关的事物。
作用域是一个声明,它讨论访问的作用域。
当您请求“guild”作用域时,这意味着您的令牌将能够访问该作用域下的信息,但这并不一定意味着信息将出现在令牌或user_info响应的声明中。
相反,要获取“公会”信息,您需要使用令牌来使用它们的API。
Discord开发者门户-公会
获取当前用户公会
GET /用户/@我/公会
返回当前用户所属的部分公会对象列表。

需要公会OAuth2范围

相关问题