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

时间:2013-09-06 21:00:23

标签: java spring security spring-mvc authorization

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

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

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

如何阻止User2访问/ item / 1?

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

我应该保留一个持久的用户项目地图,并在每次返回回复之前进行检查吗?

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

2 个答案:

答案 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为您提供了一种架构(见下图)以及一种可用于表达特定授权方案的授权语言,例如。

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

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

The XACML architecture with at its core the Policy Decision Point or PDP