我正在尝试设置IdentityServer 4 asp.net核心应用程序。 我正在关注本教程:Getting started with IdentityServer4
我在Startup类中配置了所有测试集合,我启动了应用程序,并以已配置的测试用户之一登录。
客户:
new Client()
{
ClientId = "teacup.Showroom",
ClientName = "teacup showroom client",
AllowedGrantTypes = GrantTypes.ClientCredentials,
ClientSecrets = new List<Secret>()
{
new Secret(("super.secret.key".Sha256()))
},
AllowedScopes = new List<string>
{
{ "teacup.Authenticate" },
{ "teacup.Register" }
}
}
身份资源:
new List<IdentityResource> {
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
new IdentityResources.Email(),
new IdentityResource {
Name = "customer",
UserClaims = new List<string> {"customer"}
}
};
API资源:
new ApiResource {
Name = "teacup",
DisplayName = "teacup API",
Description = "teacup API Access",
UserClaims = new List<string> {"customer"},
ApiSecrets = new List<Secret> {new Secret("scopeSecret".Sha256())},
Scopes = new List<Scope> {
new Scope("teacup.Authenticate"),
new Scope("teacup.Register")
}
}
};
这是我登录时使用的测试用户:
new TestUser {
SubjectId = "5BE86359-073C-434B-AD2D-A3932222DABE",
Username = "small",
Password = "th",
Claims = new List<Claim> {
new Claim(JwtClaimTypes.Email, "small@teamhouse.com"),
new Claim(JwtClaimTypes.Role, "customer")
},
}
当我尝试登录时,服务器成功响应。但是告诉我用户没有对我任何资源的访问权限。你能告诉我为什么吗?
答案 0 :(得分:2)
您没有任何使用涉及用户的OAuth流的应用程序(也称为clients
)。您的唯一客户端teacup.Showroom
使用的GrantTypes.ClientCredentials
是专门为在用户上下文之外工作而设计的,因此自然而然地,由于没有合格的应用程序,因此您的用户无法授予对任何应用程序的访问权限。
您应该检查Identity Server 4 Samples,尤其是可以从Implicit Flow
的示例开始,该示例将涉及用户登录并征得应用程序(客户端)的同意,因此也将出现在“客户端应用程序访问”视图。