[英]Java Spring Authentication, Authorization, and Ownership in multiple accounts web application
我是Web应用程序和安全的新手,我有一个基本问题。
想象一个具有单个数据库但多个帐户的Java Web应用程序。 为了简单起见,我们考虑一个待办事项列表,在该列表中,人们只能在/ item / item-id上访问他们自己的“项目”。 例如:
例如,如何防止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为您提供了一种体系结构(请参见下图)以及一种授权语言,可用于表达特定的授权方案,例如
您可以根据需要设置任意多个规则。 没有限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.