dotnet core 2.2.3 和 Keycloak 4.5.0 基于角色的授权存在一些小问题。
在 Keycloak 中,我定义了一个“tester”角色和一个客户端角色“developer”,并为“admin”用户定义了适当的角色映射。在对 Keycloak 进行身份验证后;如果我查看 jwt.io 中的 JWT,我可以看到以下内容:
{
"realm_access": {
"roles": [
"tester"
]
},
"resource_access": {
"template": {
"roles": [
"developer"
]
},
...
},
...
}
Run Code Online (Sandbox Code Playgroud)
在 .NET 核心中,我尝试了很多事情,例如添加[Authorize(Roles = "tester")]或[Authorize(Roles = "developer")]到我的控制器方法以及使用基于策略的授权,我context.User.IsInRole("tester")在其中检查我的AuthorizationHandler<TRequirement>实现。
如果我在身份验证处理程序中设置了一些断点。当它被击中时,我可以看到“tester”和“developer”角色列为context.user.ClaimsIEnumerable下的项目,如下所示。
{realm_access: {"roles":["tester"]}}
{resource_access: {"template":{"roles":["developer"]}}}
Run Code Online (Sandbox Code Playgroud)
所以,我应该能够被用于验证值做成功的AUTH处理器的授权realm_access和resource_access中context.user.Claims集,但这需要我反序列化要求值,这只是似乎是JSON字符串。
我在想必须有更好的方法,或者我没有做对的事情。