Identityserver4 ApiResource和IdentityResource具有相同的名称

时间:2017-02-17 23:28:04

标签: api scope resources identity identityserver4

我是OAuth2和OpenID Connect领域的新手,我正在尝试使用IdentityServer4构建API并保护它。我创建了以下资源: -

public static class MyResources
{
    public static IEnumerable<IdentityResource> GetIdentityResources()
    {
        return new List<IdentityResource>()
        {
            new IdentityResources.OpenId(),
            new IdentityResources.Profile(),
            new IdentityResource("someResource", "some description", new [] { "something" })
        };
    }

    public static IEnumerable<ApiResource> GetApiResources()
    {
        return new List<ApiResource>()
        {
            new ApiResource("someResource", "some other description", new [] { "somethingElse" })
        };
    }
}

因为你可以看到我有一个名为someResource 的 IdentityResource,还有一个名为someResource ApiResource。最后,在我的客户端配置中,我定义了以下客户端范围,其中包含someResource 以进行访问

public static class Clients
{
    public static IEnumerable<Client> GetClients()
    {
        return new[]
        {
            new Client
            {
                ClientId = "MyClientId",
                ClientName = "My Client Name",
                ClientSecrets = new List<Secret> { new Secret("secret".Sha256()) },
                AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
                RedirectUris = { "http://localhost:5002/signin-oidc" },
                PostLogoutRedirectUris = { "http://localhost:5002" },
                AllowedScopes = new List<string>
                {
                    StandardScopes.OpenId,
                    StandardScopes.Profile,
                    "someResource"
                },
                RequireConsent = true,
                AllowOfflineAccess = true
            }
        };
    }
}

当我运行应用程序时,这就是我在同意屏幕上看到的内容

ID4 Consent Screen

正如您在屏幕截图中看到的,同意屏幕同时提供了IdentityResource以及名为someResource的ApiResource。这种设计是否有意,并且您必须仔细规划资源的命名,以免发生冲突。我希望有两个具有相同名称的不同资源至少抛出一个运行时错误,因为客户端作用域只能按名称而不是资源类型区分。你有什么想法?

1 个答案:

答案 0 :(得分:0)

范围名称必须是唯一的。

如果您正在使用&#34;简化&#34;创建资源的方式 - 隐式创建具有相同名称的范围。

IOW - 不要这样做;)