基于 Spring 安全权限的 api 访问
Posted
技术标签:
【中文标题】基于 Spring 安全权限的 api 访问【英文标题】:Spring security permissions based access for api 【发布时间】:2016-03-27 12:27:37 【问题描述】:我们有一个基于article 和this post 实施的解决方案。现在我们需要增强这个解决方案。这是用例。
有各种权限,如CREATE_USER
、CREATE_ORG
等...但是根据用户角色,我们需要应用某些限制。例如ROLE_ADMIN
和ROLE_ORG_ADMIN
可以创建用户。但是ROLE_ORG_ADMIN
只能创建具有某些特定权限的用户(或者ROLE_ORG_ADMIN
应该不能创建具有ROLE_ADMIN
权限的用户)
ROLE
只是一组权限
用户与角色相关联,登录时org.springframework.security.core.userdetails.User.authorities
设置了权限而不是ROLE
我们有基于令牌的身份验证的 REST 应用程序。
@RequestMapping(value = "/users",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
@Secured(AuthoritiesConstants.CREATE_USER)
public ResponseEntity<?> createUser(@RequestBody ...)
现在我们有一个管理界面,可以从 UI 控制这些限制,在用于创建用户的 UI 中,我们不会在 ROLE_ORG_ADMIN
的选择列表中显示 ROLE_ADMIN
。我们将为第三方公开 api。我们不确定如何在 api 级别做到这一点。
POST /api/users
"id": null,
"login": "name",
"firstName": "first",
"lastName": "Last",
"email": "first.last@email.com",
"activated": true,
"langKey": "en",
"createdBy": null,
"createdDate": null,
"lastModifiedBy": null,
"lastModifiedDate": null,
"resetDate": null,
"resetKey": null,
"authorities": [
"ROLE_ORG_ADMIN",
"ROLE_ADMIN"
]
我们要做的是限制角色为ROLE_ORG_ADMIN
的用户,创建角色为ROLE_ADMIN
的用户。 ROLE_ORG_ADMIN
和ROLE_ADMIN
都拥有CREATE_USER
的权限。如果当前用户角色不是ROLE_ADMIN
,则在尝试创建角色为ROLE_ADMIN
的用户时,api 应该响应拒绝访问。请帮忙。
【问题讨论】:
@willie-wheeler 因为你是我提到的文章的作者,请查看这个问题。 【参考方案1】:我想分享两种处理方法, 选项 1. 在创建用户时如何向用户列出可用的 User_Roles?如果您要显示所有用户角色并允许用户选择相应的角色,那么在列出可用用户角色本身时,如果登录的用户是 ROLE_ORG_ADMIN,则可以避免列出 ROLE_ADMIN。
选项 2。如果您不喜欢在 UI 中处理它,那么在后端创建 USER 时,如果登录用户 ROLE_ORG_ADMIN 尝试使用 ROLE_ADMIN 创建 USER,则可以通过异常。您可以通过主体对象访问登录的用户详细信息。
希望任何一个选项都可以实施。
【讨论】:
我在 UI 中处理这个没有问题。我已经在做你提到的。我试图弄清楚如何控制何时公开 API。看看是否有任何内置的弹簧方式可以做到这一点。以上是关于基于 Spring 安全权限的 api 访问的主要内容,如果未能解决你的问题,请参考以下文章
无法实现对 Spring-Boot API 的基于角色的访问
spring security需要登录后才能访问的路径的权限配置是怎么样的