在带有 CAS 和 LDAP 的 Grails 中使用 Spring Security

Posted

技术标签:

【中文标题】在带有 CAS 和 LDAP 的 Grails 中使用 Spring Security【英文标题】:Using Spring Security in Grails with CAS and LDAP 【发布时间】:2013-07-25 10:37:23 【问题描述】:

我正在尝试在 Grails 中设置 Spring Security,以针对 CAS 进行身份验证并针对 LDAP 进行授权。我找到了几个例子(我现在打开了大约 20 个浏览器选项卡),但没有一个能回答整个问题。大多数示例是 Grails + CAS 或 Grails + LDAP,但没有 Grails + CAS + LDAP 示例。

【问题讨论】:

【参考方案1】:

所以我让它工作了,它真的没那么糟糕,但我希望我先看到@cantoni 的example。它会让这变得非常容易。我的设置比他的简单一点,所以我将在此处添加。

安装 Spring Security Core、CAS 和 LDAP 插件。 重要提示:在更新spring-security-cas:1.0.5 之前,我不会尝试使用新的spring-security-core:2.0-RC2spring-security-ldap:2.0-RC2。 CAS 插件似乎不适用于它们。

    plugins 
    ....
    //security
    compile ":spring-security-core:1.2.7.3"
    compile ":spring-security-cas:1.0.5"
    compile ":spring-security-ldap:1.0.6"
    ...
    

如果您不使用 daoAuthenticationProvider,则无需运行 quickstart 命令,而我没有。

Config.groovy

中配置core和cas插件
//Spring Security Core Config
grails.plugins.springsecurity.providerNames = ['casAuthenticationProvider'] 
grails.plugins.springsecurity.rejectIfNoRule = true
grails.plugins.springsecurity.securityConfigType = "InterceptUrlMap"
grails.plugins.springsecurity.interceptUrlMap = [
    '/js/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/css/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/images/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/login/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/logout/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/**': ['hasAnyRole("ROLE_OPERATOR","ROLE_ADMIN")']
]

//Spring Security CAS Config
grails.plugins.springsecurity.cas.loginUri = '/login'
grails.plugins.springsecurity.cas.serviceUrl = 'http://server.company.com:8080/app-name/j_spring_cas_security_check'
grails.plugins.springsecurity.cas.serverUrlPrefix = 'https://sso.company.com/cas'
grails.plugins.springsecurity.cas.proxyCallbackUrl = 'http://server.company.com:8080/app-name/secure/receptor'
grails.plugins.springsecurity.cas.proxyReceptorUrl = '/secure/receptor'

如果您想使用注释而不是拦截器映射,您可以省略 rejectIfNoRulesecurityConfigTypeinterceptUrlMap

resources.groovy

中配置您的 userDetailsS​​ervice 以委托给 LDAP
// load ldap roles from spring security
initialDirContextFactory(org.springframework.security.ldap.DefaultSpringSecurityContextSource,
    "ldap://123.45.67.89:389")
    userDn = "myLdapUser"
    password = "myLdapPwd"


ldapUserSearch(org.springframework.security.ldap.search.FilterBasedLdapUserSearch,
    "DC=foo,DC=company,DC=com", "sAMAccountName=0", initialDirContextFactory)



ldapAuthoritiesPopulator(org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator,
    initialDirContextFactory,"OU=foo,DC=bar,DC=company,DC=com")
      groupRoleAttribute = "cn"
      groupSearchFilter = "member=0"
      searchSubtree = true
      rolePrefix = "ROLE_"
      convertToUpperCase = true
      ignorePartialResultException = true


userDetailsService(org.springframework.security.ldap.userdetails.LdapUserDetailsService,ldapUserSearch,ldapAuthoritiesPopulator)
 

【讨论】:

你不知道这对我有多大帮助。非常感谢。 不客气。很高兴能一次站在 *** 的另一边。我从其他人的回答中受益匪浅,我很高兴能够真正帮助别人。【参考方案2】:

我已分享 (GitHub) 一个集成 Grails (2.2.0) + Spring Security Plugin + CAS + LDAP 的示例应用程序。

我的工作是基于这个链接:http://dominikschuermann.de/index.php/2010/11/using-grails-with-cas-and-ldap/,但是很遗憾这个链接没有激活。

https://github.com/luizcantoni/TestCAS-LDAP-Grails

此应用使用 CAS 进行身份验证。经过身份验证后,CAS 重定向到 Grails,该 Grails 使用一些 Active Directory 信息(电子邮件和姓名)填充(通过 ldap)用户。

这是用一些 AD 信息填充用户的文件:https://github.com/luizcantoni/TestCAS-LDAP-Grails/blob/master/src/groovy/example/PrepopulateUserDetailsService.groovy

查看resources.groovy:https://github.com/luizcantoni/TestCAS-LDAP-Grails/blob/master/grails-app/conf/spring/resources.groovy

最后,带有 CAS 和 LDAP 配置的 Config.groovy:https://github.com/luizcantoni/TestCAS-LDAP-Grails/blob/master/grails-app/conf/Config.groovy

【讨论】:

以上是关于在带有 CAS 和 LDAP 的 Grails 中使用 Spring Security的主要内容,如果未能解决你的问题,请参考以下文章

Grails:Spring Security CAS 在 2.2.3 中工作,但在 2.3.0 中不工作

无法使用 grails 通过 CAS 单点登录登录

在grails 2.2.4 spring security core 2.0中配置ldap?

Grails spring security LDAP 从 LDAP 基础获取 ROLE

LDAP 与 MYSQL .. JA-SIG CAS 与 LDAP 与 CAS 与 MySQL

Grails 3 Spring Security LDAP 插件和 Tomcat 8