繁体   English   中英

多帐户Web应用程序中的Java Spring身份验证,授权和所有权

[英]Java Spring Authentication, Authorization, and Ownership in multiple accounts web application

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

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

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

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

这似乎超出了我的身份验证(这是谁?)和授权(他/她具有什么作用?)。

我是否应该保留用户项的映射并在返回响应之前进行每次检查?

有任何春季(或其他)技巧/帮助程序可以解决此问题?

授权不是“您扮演什么角色?” 这是“您被允许这样做吗?” 角色将在决定是否允许该主题方面发挥作用

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

User2试图访问(在HTTP GET,POST,DELETE,PUT中为CRUD)在/item/1处的资源。 他们被允许吗? 否。因此请拒绝他们访问。


我是否应该保留用户项的映射并在返回响应之前进行每次检查?

如何执行授权取决于您。 Spring安全性肯定提供了一些很好的工具来从数据库中做到这一点,同时又将该逻辑与应用程序逻辑分离(如果需要)。

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

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

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

XACML为您提供了一种体系结构(请参见下图)以及一种授权语言,可用于表达特定的授权方案,例如

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

您可以根据需要设置任意多个规则。 没有限制。

XACML体系结构以策略决策点或PDP为核心

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM