我是网络应用程序和安全性的新手,我有一个基本的问题。
想象一下,只有一个数据库但有多个帐户的单个Java Web应用程序。让我们考虑简单的待办事项列表,人们只能访问/ item / item-id中自己的“项目”。 EG:
如何阻止User2访问/ item / 1?
这似乎超出了身份验证(这是谁?)和授权(他/她有什么角色?)给我。
我应该保留一个持久的用户项目地图,并在每次返回回复之前进行检查吗?
这个问题是否有任何Spring(或其他)技巧/助手?
答案 0 :(得分:1)
授权不是“你有什么角色?”。这是“你被允许这样做吗?”。 角色将在决定是否允许主题时发挥作用。
您所描述的正是授权的目的。
User2正试图在/item/1
访问(在HTTP GET,POST,DELETE,PUT中考虑CRUD)资源。他们被允许吗?不,所以拒绝他们访问。
我应该保留一个持久的用户项目地图,并在每次返回回复之前进行检查吗?
您如何执行授权取决于您。 Spring安全性肯定提供了一些很好的工具来从数据库中完成它,同时将逻辑与应用程序逻辑分离(如果需要)。
我还想推荐另一个安全框架:Apache Shiro。我认为它比Spring安全性更容易配置,我发现它的身份验证/授权逻辑更直接。
答案 1 :(得分:0)
除了Spring Security和Apache Shiro之外,您还需要考虑基于XACML的授权框架,例如: SunXACML,WSO2,Axiomatics(免责声明:我为Axiomatics工作)。
XACML是可扩展的访问控制标记语言。它是细粒度授权的事实上的标准。就像SAML在身份联合/ SSO方面的表现一样,XACML可以帮助您获得授权。
XACML为您提供了一种架构(见下图)以及一种可用于表达特定授权方案的授权语言,例如。
您可以拥有任意数量的规则。没有限制。