使用CAS和LDAP在Grails中使用Spring Security

时间:2013-07-25 13:38:35

标签: grails spring-security ldap cas

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

2 个答案:

答案 0 :(得分:8)

所以我开始工作了,它确实没有那么糟糕,但我希望我先见过@ 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

中配置核心和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

将您的userDetailsS​​ervice配置为 resources.groovy

委托给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){
} 

答案 1 :(得分:3)

我已经分享了(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