我正在构建一个新的安全令牌服务(在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"
};
答案 0 :(得分:1)
IdentityServer并非要这样做。它授予应用程序使用用户身份的权限,而不是用户使用应用程序的权限。
如果您仅在构建一个简单的系统,则可以为用户分配role
声明,并在应用程序中制定策略,允许/禁止基于用户角色的用户。但是随着您的许可逻辑不断发展,这将变得难以管理。
看看PolicyServer,他们对您遇到的问题做了很好的介绍。 https://policyserver.io/