【问题标题】:Spring security user based permission? (not role based)Spring Security 基于用户的权限? (不基于角色)
【发布时间】:2020-12-18 03:50:45
【问题描述】:

假设我有一个由用户和项目组成的数据库。用户与项目具有一对多的关系。用户可以使用 REST 端点进行操作。

问题是: 如何验证 this 用户拥有 this 资源?

我不希望恶意用户更改 ID,然后突然查看另一个人的项目详细信息/图像/等。把它想象成社交媒体(我的应用不是社交媒体,而是试图说明问题):尽管具有相同的“状态”,但您只能查看自己的图像,而不能查看其他人的图像。

大多数 spring-security 在线博客都使用基于角色的方法。在这种情况下,我什至不知道要搜索什么(尝试了多个搜索查询均无济于事)。

一个选项是对每个资源请求/操作运行某种多连接查询,直到我达到该资源 ID 并检查它的拥有用户以检查它是否是登录用户。但是,我不确定这种方式是否有效,因为实际应用程序中的链中有多个表(如果我手动使用这种方式,可能会有很多连接;例如:用户-> 项目-> 任务列表-> .. . -> 注意;删除笔记会触发大链)或如何让“授权人”使用它。

我有什么选择?

如果它很重要: 我正在使用 spring-boot + hibernate/JPA + spring-security

【问题讨论】:

    标签: spring spring-boot hibernate spring-security


    【解决方案1】:

    Spring Security 有以下几个概念:

    身份验证:

    证明一个演员就是它所保证的那个人。身份验证使用凭据完成,其中凭据可以采用任意数量的形式 - 用户名/密码、令牌、硬件密钥等。

    您可以使用一组可接受的身份验证提供程序设置 Spring Security。

    授权:

    给定一个经过身份验证的用户,决定该用户是否有权访问给定的资源。资源可以在哪里:

    • HTTP 端点。
    • Java 方法。
    • 对象的属性。

    您在这里要做的是提供自定义授权方案。

    您可以阅读 Spring Security 的授权架构here,包括如何设置自定义授权。准备好后,您可以随时提出具体问题。

    【讨论】:

    • 如果我听起来像个新手(我是),请原谅我。在阅读了有关该主题的更多信息后,我必须制定自己的自定义授权决定方法。我是否在该方法中进行查询(通过调用服务)?此外,由于有不同的资源(图像和一些其他可由用户操作的实体),这是否意味着我必须为每个资源定义一个?最后,如果您碰巧有关于实施的资源,那就太好了。
    • 这个spring blog article 可以作为更好的春季安全入门。
    猜你喜欢
    • 2016-10-14
    • 2020-06-16
    • 2016-07-01
    • 2018-11-28
    • 1970-01-01
    • 2020-07-09
    • 2021-04-01
    • 2017-10-19
    • 2018-05-29
    相关资源
    最近更新 更多