假设我有一个由用户和项目组成的数据库。用户与项目具有一对多关系。用户可以使用其余端点进行操作。
问题是: 如何验证 this 用户拥有 this 资源?
我不希望恶意用户更改ID,然后突然他查看另一个人的项目详细信息/图像/等。可以将其视为社交媒体(我的应用程序不是社交媒体,而是试图说明问题):尽管具有相同的“状态”,但您只能查看自己的图像,而不能查看其他人的图像。
大多数在线春季安全博客都使用基于角色的方法。在这种情况下,我什至不知道要搜索什么(尝试多次搜索查询均无济于事)。
一个选择是对每个资源请求/操作运行某种类型的多联接查询,直到我到达该资源ID并检查其拥有的用户以检查它是否为登录用户。但是,我不确定这种方法是否有效,因为实际应用程序中的链中有多个表(如果我手动进行这种操作,可能会有很多联接;例如:user-> project-> tasklist-> .. 。->注释;删除注释会触发较大的链条)或如何使“授权者”使用它。
我有什么选择?
重要的是: 我正在使用spring-boot + hibernate / JPA + spring-security
答案 0 :(得分:1)
Spring Security具有以下概念:
身份验证:
证明演员是谁的角色。验证使用凭据完成,其中凭据可以采用多种形式-用户名/密码,令牌,硬件密钥等。
您可以使用一组可接受的身份验证提供程序来设置Spring Security。
授权:
给出一个已认证的用户,确定该用户是否有权访问给定资源。资源可以在哪里:
您要在此处执行的是自定义授权方案。
您可以阅读有关Spring Security的授权体系结构here的信息,包括如何设置自定义授权。准备就绪后,您可能会问一些具体问题。