У меня есть приложение, созданное с использованием .NET Core API, Keycloak и JWT Token.
Более старая версия Keycloak, которую я использовал до сих пор, когда он создавал токен JWT, писал здесь роли на полезной нагрузке:
{
"user_roles": [
"offline_access",
"uma_authorization",
"admin",
"create-realm"
]
}
Но теперь, после того как я обновил его,здесь записываются роли в полезной нагрузке:
{
"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")
))
);
});
}