我目前正在为Web应用程序开发一个spring-boot 2.0
REST
后端。 spring-boot
应用程序接收OAuth2
AccessToken进行身份验证,并具有特定于应用程序的角色进行授权。现在,我想基于REST
角色保护各种OAuth2
端点和方法。我正在寻找一种解决方案,它不会将我的代码直接耦合到角色,不不像@PreAuthorize("hasRole('ADMIN')")
那样。
除了授权,REST
端点还应该返回定制的结果(例如,如果请求包含有效的OAuth2
令牌且角色为'company_A_internal',则响应应包含结果集过滤为“ company_A”)。
到目前为止我已经完成的事情:
OAuth2
的帮助下基于spring-security
令牌的身份验证OAuth2
令牌角色映射到spring-security
GrantedAuthorities
,以便SecurityContextHolder.getContext().getAuthentication().getAuthorities()
返回以前的角色我在寻找什么
基于角色(现在存储在GrantedAuthorities
中),REST
端点应通过单独的机制进行保护。我做了一些研究,发现了一个非常有趣的article。
我想实现类似的功能(例如,作为单独的role_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
的上下文中这将如何工作?是否可以在当前设置的基础上实现此目的?
我感谢任何形式的建议和帮助,并很乐意回答评论和其他问题。
答案 0 :(得分:0)
您可以尝试https://github.com/vsfexperts/rbac。您必须配置从角色到特权的映射,并使用@Secured(“ some_privilege”)注释端点。 请记住,这是静态的,并且不允许基于内容的安全性,例如对/ orders / 5的访问将不仅限于x的用户,x是5的所有者。它仅受角色限制,该角色具有/ orders端点注释的特权(例如@Secured(“ some_privilege”))。