0

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

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

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

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

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

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

是否有针对此问题的 Spring(或其他)技巧/助手?

4

2 回答 2

1

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

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

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


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

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

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

于 2013-09-06T21:06:37.427 回答
0

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

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

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

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

你可以有尽可能多的规则。没有限制。

以策略决策点或 PDP 为核心的 XACML 架构

于 2013-09-19T18:58:10.587 回答