gpt4 book ai didi

oauth - 使用 Keycloak 和 .NET 核心的基于角色的授权

转载 作者:行者123 更新时间:2023-12-03 20:15:26 31 4
gpt4 key购买 nike

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"
]
},
...
},
...
}
在 .NET 核心中,我尝试了很多方法,例如添加 [Authorize(Roles = "tester")][Authorize(Roles = "developer")]到我的 Controller 方法以及使用基于策略的授权,我检查 context.User.IsInRole("tester")在我的 AuthorizationHandler<TRequirement>执行。
如果我在身份验证处理程序中设置了一些断点。当它被击中时,我可以看到“tester”和“developer”角色被列为 context.user.Claims 下的项目。 IEnumerable 如下。
{realm_access: {"roles":["tester"]}}
{resource_access: {"template":{"roles":["developer"]}}}
因此,我应该能够通过验证 realm_access 的值在 auth 处理程序中成功进行授权。和 resource_accesscontext.user.Claims集合,但这需要我反序列化声明值,这些值似乎只是 JSON 字符串。
我在想必须有更好的方法,或者我没有做对的事情。

最佳答案

“AspNetCore.Authorization”需要名为 的声明(字段)中的角色“角色” .并且此声明必须是 字符串数组 (多值)。您需要在 Keycloak 端进行一些配置。

第一种选择:

您可以更改现有角色路径。

转到您的 Keycloak 管理控制台 > 客户端范围 > 角色 > 映射器 > 客户端角色

  • 将“ token 声明名称”更改为“角色”
  • 多值:真
  • 添加到访问 token :True

  • 第二种选择:

    如果您不想触及现有路径,您可以创建一个新的 Mapper 以在根目录中也显示相同的角色。

    转到您的 Keycloak 管理控制台 > 客户端范围 > 角色 > 映射器 > 创建
  • 名称:“root 客户端角色”(或任何您想要的)
  • 映射器类型:“用户客户端角色”
  • 多值:真
  • token 声明名称:“角色”
  • 添加到访问 token :True
  • 关于oauth - 使用 Keycloak 和 .NET 核心的基于角色的授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56327794/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com