如何通过IdentityServer4授予用户访问特定API的权限?

时间:2019-10-21 10:08:12

标签: javascript asp.net asp.net-core identityserver4 openid-connect

我正在构建一个新的安全令牌服务(在ASP.NET Core上运行IdentityServer4),并且需要使登录到前端应用程序的用户只能访问某些API。

到目前为止,我已经能够让用户登录到JS客户端,并获得对特定JS客户端令牌服务上配置为允许范围的API的访问权限的授权/身份验证。

我希望做的是将每个用户配置为只能访问certian API,而不必访问允许范围内的所有API。

我对此并不陌生,所以我什至不确定我是否在问正确的问题。但是,我希望它仍然可以理解,并且会很乐意回答任何问题。


我如何在令牌服务中定义用户:

new TestUser
{
    SubjectId = "05624",
    Username = "asd",
    Password = "asd",
    Claims = new []
    {
        new Claim("name", "My Name"),
        new Claim("email", "myname@email.net")
    }
}

我如何在令牌服务中定义我的客户:

new Client
{
    ClientId = "js-demo"
    AllowedGrantTypes = GrantTypes.Code,
    AllowedScopes = 
    { 
        "openid", 
        "api_1",
        "api_2"
    },
    AllowedCorsOrigins = { "http://localhost:5000" },
    RedirectUris = { "http://localhost:5000/callback.html" },
    PostLogoutRedirectUris = { "http://localhost:5000/index.html" },
    RequirePkce = true,
    RequireClientSecret = false,
    AllowAccessTokensViaBrowser = true
}

我如何在令牌服务中定义我的API资源:

new List<ApiResource>
{
    new ApiResource("api_1"),
    new ApiResource("api_2")
};

我如何定义前端客户端:

var config = {
    client_id: "js-demo",
    response_type: "code",
    scope: "openid api_1 api_2",
    authority: "http://localhost:9999",
    redirect_uri: "http://localhost:5000/callback.html",
    post_logout_redirect_uri: "http://localhost:5000/index.html"
};

1 个答案:

答案 0 :(得分:1)

IdentityServer并非要这样做。它授予应用程序使用用户身份的权限,而不是用户使用应用程序的权限。

如果您仅在构建一个简单的系统,则可以为用户分配role声明,并在应用程序中制定策略,允许/禁止基于用户角色的用户。但是随着您的许可逻辑不断发展,这将变得难以管理。

看看PolicyServer,他们对您遇到的问题做了很好的介绍。 https://policyserver.io/