基于 Spring 安全组的授权 [关闭]

Posted

技术标签:

【中文标题】基于 Spring 安全组的授权 [关闭]【英文标题】:Spring security group based authorization [closed] 【发布时间】:2011-12-04 11:43:40 【问题描述】:

我打算制作基于组的权限方案,但我对以下内容感到困惑:

我有一些问题:

    最好的方法是什么User > Group > Roles > Permissions User > Roles > Permissions 在这种情况下如何实现安全性(登录/记住我)(需要一个好的教程链接)。 方法级安全将使用注解@PreAutorize hasPermission(#, '')或hasRole还是什么? 如何根据权限(UI 是 JSF)在 UI 中隐藏组件(非管理员的管理)? 如果我在视图中隐藏组件,那么方法级别安全性的重要性是什么?

【问题讨论】:

【参考方案1】:

设计安全模型本身并不是一项简单的任务,而且如果没有对该领域的详细了解,您要尝试保护它几乎是不可能的。话虽如此,您可以在此处获得的任何建议都将与您的问题一样普遍。

1) 在大多数应用程序中,User -> Roles 就足够了。在更复杂的情况下,可以使用User -> Roles -> Permissions,但这完全取决于您如何定义每个的范围。通常细粒度的角色并将其中的几个分配给用户正是您所需要的。我想说在中间添加另一个级别 Groups 有点太多了。把它想象成一个文件系统——平面文件系统存在并且不像看起来那么复杂。请花点时间做出决定,因为这是最重要的决定之一,并且会产生许多不容易预测的影响。

2) Spring Security 中已经实现了身份验证和记住我的机制——您需要做的就是选择最适合您的实现并使用安全命名空间支持对其进行配置。如果您还没有,请查看Petclinic 示例应用程序。

3) 如果您决定使用权限,则应始终检查权限。保持您选择的增益水平。始终如一。总是。

4) 根据您使用的查看技术,JSP taglib 可能会派上用场(如 Ralph 所述)。 JSF 没有这样的东西 - 但编写类似的东西相对简单。

5) 正如 Ralph 所说,如果您隐藏某些内容并不意味着它不再存在 - 它仍然可以由非特权用户调用。

【讨论】:

一个非常好的答案,应该比大量“过度投票”的人获得更多的支持。【参考方案2】:

5) 即使您在 GUI 中隐藏了某些功能,恶意用户也可能发送伪造的 HTTP 请求来调用您的功能。

4) 对于 JSP,有 spring security tag lib,也许 JSF 有类似的东西

3) 取决于您的角色 - 权限分配的实现

2) 身份验证和记住我与是否使用组无关。

1) 取决于您的需求。组使它变得更加困难,所以我会从 User-Role-Permission 开始,然后在我真正需要的时候添加组。 -- Spring 提供了一个开箱即用的解决方案,可以为用户分配权限。添加角色很容易。但是如果你从 Groups 开始,你必须自己实现它。

我强烈推荐阅读 Spring-Security-Docs。 要么您按照 by spring security 推荐的方式进行操作:“Suggested Steps for Getting Started with Spring Security”,要么您阅读(非常好的)书“Spring Security 3”(由框架的一些作者编写)。

如果您按照教程进行操作,您会发现如何进行简单的登录并记住我。

要区分角色和权限,您有两种选择。

spring 3 中有一个集成的解决方案(你必须搜索你的 - 我不使用它。) 您可以实现自己的授权提供程序,通过已分配的角色添加权限。

【讨论】:

感谢您的出色回答,但我真的需要关于以下几点的更多详细信息 3- 我假设 addUser 或 deleteUser 等方法执行特定操作,因此它只需要权限检查,对吗? 2-请给我一个实现身份验证的好链接并记住我 1-组有什么不好,它比角色有什么优势,这意味着我为什么要使用它?提前致谢。 @Jsword:我不想失礼,但安全是你真正需要了解的主题。所以我强烈建议阅读更多关于 Spring Security 的内容。 你说的很对,我需要阅读更多,这就是为什么我要求一个好的教程,非常感谢。 那里有很多教程。在这个线程中提到了一些。 Spring 安全的新书已经出版。 Manning press 有一个,您可以在几分钟内下载并开始练习。使用你最喜欢的搜索引擎——“spring security groups authentication code”会是一个有用的搜索。【参考方案3】:

Spring Security 4-SNAPSHOT

权威组

http://docs.spring.io/autorepo/docs/spring-security/4.0.0.CI-SNAPSHOT/reference/htmlsingle/#authority-groups

另一种方法是将权限划分为组并分配 组给用户。

【讨论】:

以上是关于基于 Spring 安全组的授权 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Active Directory 中的安全组的 Asp.Net 基于角色的身份验证

基于输入参数标准的 Spring 安全授权

在 Spring 安全性中使用 rest 服务进行身份验证和授权 [关闭]

基于 ROLES 的 Spring 安全授权不起作用

neutron openvswitch agent实现安全组的方法

安全组在啥级别提供保护