代码之家  ›  专栏  ›  技术社区  ›  git-flo

spring security将角色和权限解耦

  •  3
  • git-flo  · 技术社区  · 8 年前

    我目前正在做一项研究 spring-boot 2.0 REST web应用程序的后端。这个 spring-boot 申请收到 OAuth2 AccessTokens用于身份验证,具有用于授权的特定于应用程序的角色。现在我想确保各种 休息 基于 OAuth2 角色。我正在寻找一种解决方案,它不会将我的代码直接与角色耦合, 不 喜欢 @PreAuthorize("hasRole('ADMIN')") .

    除了授权之外 休息 端点还应返回自定义结果(例如,如果请求包含有效的 OAuth2 具有“company_A_internal”角色的令牌,响应应包含在“company_A”上过滤的结果集。

    到目前为止,我已经完成了:

    1. 基于 OAuth2 代币 spring-security
    2. 地图 OAuth2 将角色标记为 春季安全 GrantedAuthorities 因此 SecurityContextHolder.getContext().getAuthentication().getAuthorities() 返回以前的角色

    我要找的是:

    基于角色(现在存储在 授权机构 )那个 休息 端点应该由单独的机制保护。我做了一些研究,发现了一个非常有趣的问题 article .

    我想实现类似的功能(例如作为单独的角色_config.yml):

    order_manager:
      '/orders':
        - 'GET'
        - 'POST'
        - 'PUT'
        - 'DELETE'
    order_editor:
      '/orders':
        - 'GET'
        - 'POST'
        - 'PUT'
    order_inspector:
      '/orders':
        - 'GET'
    

    之后,我只需要在 弹簧靴 背景:

    @Secured
    @RequestMapping("/orders")
    public void updateOrder (Order order) {
      Order updatedOrder = process(order);
      return updatedOrder;
    }
    

    在这种情况下,这将如何工作 春季安全 ? 在我目前的设置之上,有没有可能实现这一点?

    我感谢任何建议和帮助,并将很乐意回答评论和进一步的问题。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Alexander Pilch    7 年前

    你可以试试 https://github.com/vsfexperts/rbac 。您必须配置从角色到权限的映射,并使用@Secured(“some_privilege”)注释端点。 请记住,这是静态的,不允许基于内容的安全性,例如对/orders/5的访问将不限于用户x,用户x是5的所有者。它将只受一个角色的限制,该角色的权限用/orders端点注释(例如@Secured(“some_privilege”))。

    推荐文章