IdentityServer4角色如何表现?

时间:2019-07-26 11:45:51

标签: c# asp.net-core asp.net-web-api asp.net-identity identityserver4

我正在尝试设置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")
        },
}

当我尝试登录时,服务器成功响应。但是告诉我用户没有对我任何资源的访问权限。你能告诉我为什么吗?

enter image description here

1 个答案:

答案 0 :(得分:2)

您没有任何使用涉及用户的OAuth流的应用程序(也称为clients)。您的唯一客户端teacup.Showroom使用的GrantTypes.ClientCredentials是专门为在用户上下文之外工作而设计的,因此自然而然地,由于没有合格的应用程序,因此您的用户无法授予对任何应用程序的访问权限。

您应该检查Identity Server 4 Samples,尤其是可以从Implicit Flow的示例开始,该示例将涉及用户登录并征得应用程序(客户端)的同意,因此也将出现在“客户端应用程序访问”视图。