【发布时间】:2019-05-11 04:03:58
【问题描述】:
我有一个使用 .NET Core API、Keycloak 和 JWT Token 制作的应用程序。
到目前为止我一直在使用的旧版本的 Keycloak,当它创建 JWT 令牌时,它在有效负载上写了角色:
{
"user_roles": [
"offline_access",
"uma_authorization",
"admin",
"create-realm"
]
}
但是现在我更新它之后,它在payload上写了角色:
{
"realm_access": {
"roles": [
"create-realm",
"teacher",
"offline_access",
"admin",
"uma_authorization"
]
},
}
而且我需要知道如何将这个旧代码更改为新代码,告诉它不要查看user_roles,而是查看realm_access,然后查看roles。
public void AddAuthorization(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("Administrator", policy => policy.RequireClaim("user_roles", "admin"));
options.AddPolicy("Teacher", policy => policy.RequireClaim("user_roles", "teacher"));
options.AddPolicy("Pupil", policy => policy.RequireClaim("user_roles", "pupil"));
options.AddPolicy(
"AdminOrTeacher",
policyBuilder => policyBuilder.RequireAssertion(
context => context.User.HasClaim(claim =>
claim.Type == "user_roles" && (claim.Value == "admin" || claim.Value == "teacher")
))
);
});
}
【问题讨论】:
-
此处使用的 microsoft 身份模型不支持嵌套声明(
Claims类没有子声明选项/功能)。使用第一段中的扁平扁平(键值)结构
标签: c# asp.net-core authorization jwt keycloak