当前位置: 首页 > 知识库问答 >
问题:

使用Keycloak和.NET内核的基于角色的授权

万俟皓
2023-03-14
{
  "realm_access": {
    "roles": [
      "tester"
    ]
  },
  "resource_access": {
    "template": {
      "roles": [
        "developer"
      ]
    },
    ...
  },
  ...
}

在.NET core中,我尝试了一系列方法,例如在我的控制器方法中添加[authorize(Roles=“tester”)][authorize(Roles=“developer”)]以及使用基于策略的授权,在此我检查authorizationHandler 实现中的context.user.isinRole(“tester”)

如果我在身份验证处理程序中设置了一些断点。当它被击中时,我可以看到“tester”和“developer”角色被列为context.user.claimsIEnumerable下的项,如下所示。

{realm_access: {"roles":["tester"]}}
{resource_access: {"template":{"roles":["developer"]}}}

因此,通过验证context.user.claims集合中realm_accessresource_access的值,我应该能够成功地在身份验证处理程序中进行授权,但这需要我反序列化声明值,这些声明值似乎只是JSON字符串。

我在想一定有更好的办法,否则我做的事情就不对了。

共有1个答案

胥承
2023-03-14

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

第一种选择:

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

    null

第二种选择:

如果不想接触现有路径,可以创建一个新的映射器,在根处也显示相同的角色。

转到Keycloak管理控制台>客户端作用域>角色>映射器>创建

    null
 类似资料:
  • 我是oAuth2安全系统的新手。关于访问REST资源的基于用户角色的授权,我有一个问题。我的互联网冲浪提供了关于oauth2的身份验证部分的输入。 让我提供给你困扰我的情况。

  • 我对Spring靴还不熟悉。我需要在spring boot中实现基于角色的授权。我有不同的角色,多个用户将映射到每个角色。每当调用api时,我都会设置不同的访问权限(读取、添加、删除、编辑),需要检查访问权限并允许权限。我计划使用拦截器调用具有查询的方法,以从DB获取访问权限,并拒绝或访问api。有没有其他更好的方法我可以用同样的方法?

  • 本文展示了如何根据不同的用户角色,在登录之后来重定向到不同的页面。 在 method-security项目的基础上,我们构建了一个role-base-login项目。 build.gradle 修改 build.gradle 文件,让我们的role-base-login项目成为一个新的项目。 修改内容也比较简单,修改项目名称及版本即可。 jar { baseName = 'role-bas

  • Using a delegation key The collaborator can now push to the repository using Docker Content Trust. Docker will automatically choose and pick the right key for the targets/release role. Edit the file o

  • 一个更友好的域内基于角色的访问控制的API。 这个API是Management API的子集。 RBAC用户可以使用这个API来简化代码。 参考 全局变量 e 是 Enforcer 实例。GoNode.jsPHP.NETRust e, err := NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv") const

  • 有没有更好的方法来实现这种设置(类似于组织设置,一个人可以属于几个组织并管理其中的一些/所有组织,而不必有几个帐户)? 我用的是Keycloak 4.6