gpt4 book ai didi

java - spring-security 解耦角色和权限

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:42 26 4
gpt4 key购买 nike

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

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

到目前为止我已经取得的成就:

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

我在找什么:

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

我想实现与此类似的东西(例如作为单独的 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"))。

关于java - spring-security 解耦角色和权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51464344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com