我是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
}
};
}
}
当我运行应用程序时,这就是我在同意屏幕上看到的内容
正如您在屏幕截图中看到的,同意屏幕同时提供了IdentityResource以及名为someResource的ApiResource。这种设计是否有意,并且您必须仔细规划资源的命名,以免发生冲突。我希望有两个具有相同名称的不同资源至少抛出一个运行时错误,因为客户端作用域只能按名称而不是资源类型区分。你有什么想法?
答案 0 :(得分:0)
范围名称必须是唯一的。
如果您正在使用&#34;简化&#34;创建资源的方式 - 隐式创建具有相同名称的范围。
IOW - 不要这样做;)