Grails:Spring Security插件是否对简单安全性而言太强大了

时间:2014-06-28 00:17:59

标签: security grails spring-security ldap cas

我们有几个Grails应用程序使用共享插件,其中包括为其提供基本安全性。我们将来会添加其他类型的身份验证,因此使用Spring Security插件的想法已经出现。但是,我想知道它是否对我们相当基本的需求来说太强大了。

目前,我们使用在访问任何URL之前运行的Grails过滤器并执行安全检查。初始身份验证通过查找特定的加密POST变量或cookie(从另一个已关闭的源应用程序发送)来处理,并在解密后验证我们数据库中的详细信息。如果一切都检查出来,我们会考虑用户登录(并且还有来自加密数据的数字用户ID)。除少数拥有更多访问权限的用户外,所有用户都具有相同的访问权限。这些是在包含其数字ID的表中定义的。

但是,我们希望通过使用Active Directory凭据,封闭源系统的LDAP服务器提供的凭据以及通过CAS服务器在不太远的将来,直接登录这些Grails应用程序。

我最初的方法是寻找允许共享插件与这些不同系统连接的库,并对它们进行简单的身份验证。但是,我注意到Spring Security似乎有所有这些不同类型的身份验证的插件,这将加快开发速度。但是,模块本身看起来相当复杂,并且面向更高级的设置,这意味着我们可能花费大量时间来设置Spring Security以节省使用LDAP,CAS等插件的时间。

任何想法/评论等。非常感谢。

此外,如果我们要使用Spring Security插件,有人可以发表评论并告诉我是否可以进行以下设置......

我们希望避免为各种应用程序创建数据库表以进行身份​​验证。我们基本上想告诉Spring Security,如果用户通过了身份验证,则会对其进行身份验证。没有角色,没有组,没有什么花哨的东西(除了少数几个具有一个额外角色/组的应用程序,为用户提供额外的权限......对于这些应用程序,显然需要数据库表)。

我们还希望默认始终要求所有内容的安全性,并仅添加额外的代码以禁止此操作以允许非经过身份验证的访问。这背后的想法是,如果开发人员忘记将Spring Security标记代码添加到控制器或操作,它将默认为始终需要身份验证。

此外,我们仍然需要通过从另一个应用程序或加密的cookie发送加密的POST变量来保留原始身份验证方法。是否有可能将其构建到Spring Security中?

最后,Spring Security插件可以存储在身份验证后检索的数字用户ID,以识别用户而不是存储在身份验证期间使用的实际用户名吗?

2 个答案:

答案 0 :(得分:1)

嗯,你的帖子中有很多问题。我会尽力回答我记得的那些。

首先,Spring Security很复杂。那是因为真正的安全很难。但是,Spring Security和Grails插件在某种程度上都是非常可配置和可定制的。一旦你完成了高学习曲线,这将对你有利。

由于您的需求不断增长并且变得越来越复杂,您现在可以通过投资Spring Security来节省很多麻烦,最终节省时间和精力。

我建议您阅读Spring Security documentationSpring Security Grails documentation以及尽可能多的使用spring-security标记的SO帖子。投资一些涵盖Spring Security的书籍也不是一个坏主意。

这些是我的高级思想/评论。

就Spring安全性而言(你的其他问题)。

  1. 是的,您可以将Spring Security设置为不使用任何类型的数据库表。
  2. 您可以编写您的安全认证过滤器,通过params / etc进行自定义身份验证。
  3. 默认情况下,所有内容都锁定在最新的Grails Spring Security插件中,如果您使用interceptUrlMap,则只需更改哪些URL没有安全性或安全性与默认值IS_AUTHENTICATED_FULLY不同。< / LI>
  4. 使用自定义UserDetailsServiceUserDetails,您可以在principal中使用数字ID或任何其他详细信息。
  5. 总而言之,通过对Spring Security的正确努力和理解,您可以满足您的需求。然而,这不是一个简短而快速的过程,需要大量阅读。

答案 1 :(得分:0)

Well Springs Security是目前最好的安全插件之一。这是高度可定制和可配置的。

默认情况下,每个网址都会被弹簧安全锁定。但您可以通过在config.groovy

中添加配置来解锁所有网址
grails.plugin.springsecurity.controllerAnnotations.staticRules = ['/**' : ['permitAll']]

以上将使您的所有网址都可以访问而无需登录。不,您可以在控制器级别上对所有网址的明细性进行限制。

  1. 您不需要在数据库中拥有任何Roles表,如果您只有管理员和用户角色,则可以使用Enum insted。
  2. 您甚至可以将sprigsecurity配置为使用数据库的任何列来验证用户,无论是数字还是字符串类型。您需要做的就是覆盖UserDetailsS​​ervice和UserDetails服务类。通过此,您的所有自定义设置都会覆盖原始配置。
  3.   

    此外,我们仍需要保留原始身份验证方法   通过加密的POST变量发送从另一个应用程序或   加密的cookie。是否有可能将其构建到Spring Security中?

    对此,他们也是春天安全的良好支持。您可以在外部源完成身份验证,并使用sprinfsecurity配置它。