【发布时间】:2019-10-13 03:09:17
【问题描述】:
在使用 dotnet core 2.2.3 和 Keycloak 4.5.0 进行基于角色的授权方面存在一些小问题。
在 Keycloak 中,我为“管理员”用户定义了一个角色“测试者”和一个客户角色“开发者”,并带有适当的角色映射。对 Keycloak 进行身份验证后;如果我查看 jwt.io 中的 JWT,我可以看到以下内容:
{
"realm_access": {
"roles": [
"tester"
]
},
"resource_access": {
"template": {
"roles": [
"developer"
]
},
...
},
...
}
在 .NET 核心中,我尝试了很多方法,例如将 [Authorize(Roles = "tester")] 或 [Authorize(Roles = "developer")] 添加到我的控制器方法中,以及使用基于策略的授权,在我的 AuthorizationHandler<TRequirement> 实现中检查 context.User.IsInRole("tester") .
如果我在身份验证处理程序中设置了一些断点。当它被击中时,我可以看到在context.user.Claims IEnumerable 下列为项目的“测试人员”和“开发人员”角色,如下所示。
{realm_access: {"roles":["tester"]}}
{resource_access: {"template":{"roles":["developer"]}}}
所以我应该能够通过验证context.user.Claims 集合中realm_access 和resource_access 的值来成功在身份验证处理程序中进行授权,但这需要我反序列化声明值,似乎只是 JSON 字符串。
我认为必须有更好的方法,否则我做的事情不太对。
【问题讨论】:
标签: oauth .net-core authorization keycloak