Spring security 和 spring data :安全访问不属于当前用户的数据
Posted
技术标签:
【中文标题】Spring security 和 spring data :安全访问不属于当前用户的数据【英文标题】:Spring security and spring data : secure access to data that doesn't belong to the current user 【发布时间】:2020-10-24 12:38:34 【问题描述】:我正在使用 mongodb 构建一个 angular/springboot 全栈项目。但是我有一个关于访问不属于当前用户的数据的安全问题。例如,如果我有一个 url /mydata/123 那么当前用户可以在 /mydata/7865 之类的 url 中使用随机 id 并访问不属于他的数据。
这里是一个数据模型示例:
mydatamodel
id
criticaldata
请问如何避免这种用例,以及这样做的最佳做法是什么。 谢谢。
【问题讨论】:
您也可以将您的 URI 更改为/mydata
并从 SecurityContextHolder 获取登录用户
【参考方案1】:
使用可以通过 SPEL 中的主体访问当前登录的用户,并且您还可以访问 userId,因为它是请求参数。然后你在一个 bean 中运行你的规则。
@PreAuthorize("@userIdAccessCheckService.hasAccessTo(principal , #userId)")
@GetMapping("/user/userId")
public void yourRestControllerMethod(@RequestParam("userId") String userId)
@Service
public class UserIdAccessCheckService
// In this method, you can run your rule and check
// if the logged in person have access to userid
public boolean hasAccessTo(User principal , String userId)
....
注意
如果您允许控制器方法但希望根据类似规则显示/隐藏该页面上的某些部分,则它有一些缺点。既然这不是问题,那很好
【讨论】:
以上是关于Spring security 和 spring data :安全访问不属于当前用户的数据的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security入门(3-4)Spring Security 异常处理异常传递和异常获取
Spring 中的 spring-security-oauth2 与 spring-security-oauth2-core
Spring Session 和 Spring Security
使用 spring-session 和 spring-cloud-security 时,OAuth2ClientContext (spring-security-oauth2) 不会保留在 Redis