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

在keycloak和spring rest api中管理用户权限

胥宏义
2023-03-14

DR

  • 目标:管理api权限:
    • OIDC授权直接授予流
    • 用户联合和身份验证源:LDAP
    • 权限存储:旧数据库
    • 客户端管理和身份验证:keycloak

    因此,我的访问令牌应该如下所示:

    "resource_access": {
        “My-client”: {
          “permissions”: [
            “Show-products”,
            “Buy-something”,
            “Display-prices”
          ]
        }
      },
      "username": “myUser”
    

    那么移动应用程序应该能够基于令牌了解用户权限,并且我的无状态服务器端(API)应该能够在每次调用时访问用户权限,使用spring注释检查它们:

    @PreAuthorize("hasRole('Show-products')")
    

    问题

      null
    • Springboot 1.5.13.release
    • 密钥斗篷-适配器-BOM 3.4.3.final
    • 独立keycloak服务器3.4.3.final

共有1个答案

谢夜洛
2023-03-14

关于您的问题:

-将用户权限放在访问令牌声明上是否安全

是的,功能可以(并且应该)在访问令牌上,并且通过访问令牌,您可以在业务层中做出一些决策(基于角色/访问声明)。不过,请记住,令牌只是Base64编码的,并且可以被其他人复制和查看,所以它不应该包含秘密或特别机密的信息,通常您会在那里放置足够的关于用户的信息,以及它当前的一些权限/能力/声明。

这取决于是否需要从您的网络外部访问它。如果不是,您可以让它不受保护(并且从外部不可用/或者仅可用于某些特定的IP)。如果它将从外部获得/或者您想要用keycloack保护它,您可以拥有一个“机密”或“仅限携带者”类型的客户端。我建议您研究CORS和令牌共享,这样您就可以为其他endpoint重用您已经创建的“访问令牌”,而不需要再次进行身份验证。

是否应该依赖令牌声明来验证资源服务器中每个请求的用户权限?

不太明白你的意思。在keycloak中,资源服务器不像典型的oAuth2舞蹈那样执行额外的资源授权(除非您的策略执行器被激活,但我相信您没有使用这种方法,而是使用映射器SPI@auth服务器来正确定位您的角色?)

现在回到您的问题,如果资源服务器只是指您的应用程序提供内容,那么是的,您可以在那里使用声明,记住声明(以及整个访问令牌)是由身份验证服务器生成并进行数字签名的,因此您可以在应用程序中使用这些声明,不会有任何问题(否则也不知道如何进行)。

在keycloak中是否有其他干净的解决方案/最佳实践来处理来自外部源的用户权限?

很难说,正如你可能注意到的;web中针对您特定用途的文档非常有限;因此,这里没有大量的最佳实践工作,您唯一真正的替代方案是使用带有自定义策略SPI的策略,而这将带来其他挑战。我觉得你的解决方案很好。

最诚挚的问候。

 类似资料:
  • 如何在KeyCloak中的领域中创建管理用户?我尝试了,它给了我一个错误:

  • 主要内容:一、用户管理,二、权限管理,三、权限表,四、角色管理一、用户管理 1.创建用户 用户名参数表示新建用户的账户,由用户(User) 和主机名(Host) 构成,默认host为'%',表示所有主机(ip)都可登录,也可以使用如'lxc'@'192.168.%.%'的形式 可以不指定用户密码,无需密码登录; 2.查看用户 3.修改用户 4.删除用户 1.使用DROP USER语句来删除用户时,必须用于DROP USER权限。DROP USER语句的基本语

  • 我以前在其他项目中实现过类似的功能,但从未使用Quarkus作为底层实现框架。所以,我的猜测是与此有关。但我从没见过这样的错误。有人能给我一些关于如何绕过这个问题的见解吗?

  • 本文向大家介绍MySQL用户权限管理详解,包括了MySQL用户权限管理详解的使用技巧和注意事项,需要的朋友参考一下 用户权限管理主要有以下作用: 1. 可以限制用户访问哪些库、哪些表 2. 可以限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作 3. 可以限制用户登录的IP或域名 4. 可以限制用户自己的权限是否可以授权给别的用户 一、用户授权  •all

  • 通过grant [aɪ'dɛntɪfaɪd] 命令创建用户并授权 grant命令简单语法 grant all privileges on dbname.* to username@localhost identified by ‘password’; # 创建用户并授权 列表说明参数: grant all privileges on dbname.* to username@localhost i