【问题标题】:Java Spring Authentication, Authorization, and Ownership in multiple accounts web application多帐户 Web 应用程序中的 Java Spring 身份验证、授权和所有权
【发布时间】:2013-09-06 21:00:22
【问题描述】:

我是 Web 应用程序和安全性的新手,我有一个基本问题。

想象一个具有单个数据库但具有多个帐户的单个 Java Web 应用程序。为了简单起见,让我们考虑一个待办事项列表,人们只能在 /item/item-id 访问他们自己的“项目”。例如:

  • User1 创建项目 1 和 2;
  • User2 创建项目 3 和 4;

例如,如何防止 User2 访问 /item/1?

对我来说,这似乎超出了身份验证(这是谁?)和授权(他/她有什么角色?)。

我是否应该保留用户项目的持久地图并在每次返回响应之前检查?

对于这个问题是否有任何 Spring(或其他)技巧/帮助?

【问题讨论】:

    标签: java spring security spring-mvc authorization


    【解决方案1】:

    授权不是“你有什么角色?”。这是“你可以这样做吗?”角色将在决定是否允许该主题方面发挥作用。

    您所描述的正是授权的目的。

    User2 正在尝试访问(想想 HTTP GET、POST、DELETE、PUT 中的 CRUD)/item/1 的资源。他们被允许吗?不,所以拒绝他们访问。


    我是否应该保留用户项目的持久地图并在每次返回响应之前检查?

    如何执行授权取决于您。 Spring security 确实提供了一些很好的工具来从数据库中执行此操作,同时将该逻辑与应用程序逻辑分离(如果需要)。

    我还想推荐另一个安全框架:Apache Shiro。我认为它比 Spring security 更容易配置,而且我发现它的身份验证/授权逻辑更简单。

    【讨论】:

    • 谢谢!您能否指出任何利用 Spring Security 进行授权与应用程序逻辑分离的文档或示例代码?不幸的是,网络上有太多无用的东西......
    • 或 Shiro 示例,这些示例可以满足我的需求。我宁愿将太多东西混合在一起,但如果 Shiro 提供了大量的简化,那就太好了。
    • @Gevorg 网上应该有一些 Shiro 的例子。但是他们的文档是最好的起点。了解两个主要组件:RealmSubject
    【解决方案2】:

    除了 Spring Security 和 Apache Shiro,您还想考虑基于 XACML 的授权框架,例如SunXACML、WSO2、Axiomatics(免责声明:我为 Axiomatics 工作)。

    XACML 是可扩展访问控制标记语言。这是细粒度授权的事实标准。就像 SAML 擅长身份联合/SSO 一样,XACML 可以帮助您实现授权。

    XACML 为您提供了一种架构(见下图)以及一种授权语言,您可以使用它来表达特定的授权场景,例如

    • 医生可以查看分配给他们的患者的医疗记录
    • 护士可以查看属于同一诊所的患者的病历
    • 患者可以查看自己的记录以及他们作为监护人的患者的记录

    您可以拥有任意数量的规则。没有限制。

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      • 2011-02-07
      • 2018-01-06
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多