2013-07-25 75 views
2

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

回答

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的时候,我不是来运行快速入门命令。

配置核心和CAS插件的Config.groovy

//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' 

可以去掉,securityConfigType,如果你想使用的,而不是拦截地图标注interceptUrlMap

配置您的UserDetailsS​​ervice委托给LDAP在resources.groovy

// 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){ 
} 
+0

你不知道多少,这帮助了我。非常感谢。 – grantmcconnaughey

+1

非常欢迎。很高兴在一次的stackoverflow的另一边。我从其他人的回答中受益匪浅,我很高兴能够真正帮助别人。 – 10GritSandpaper

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

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

相关问题