繁体   English   中英

spring-security解耦角色和权限

[英]spring-security decouple roles and permissions

我目前正在为一个Web应用程序开发一个spring-boot 2.0 REST后端。 spring-boot应用程序接收OAuth2 AccessTokens以进行身份​​验证,并具有特定于应用程序的授权角色。 现在,我想基于OAuth2角色保护各种REST端点和方法。 我正在寻找一种不会将我的代码直接耦合到角色的解决方案,而不是@PreAuthorize("hasRole('ADMIN')")

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

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

  1. spring-security的帮助下,基于OAuth2令牌的身份验证
  2. OAuth2令牌角色映射到spring-security GrantedAuthorities以便SecurityContextHolder.getContext().getAuthentication().getAuthorities()返回以前的角色

我在找什么:

根据角色(现在存储在GrantedAuthorities ), REST端点应该由单独的机制保护。 我做了一些研究,发现了一篇非常有趣的文章

我想实现类似的东西(例如作为单独的roles_config.yml):

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

之后我只需要在spring-boot上下文中实现这样的东西:

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

这将如何在spring-security的背景下工作? 有没有可能的方法在我当前的设置之上实现这个?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM