Grails Spring Security X509用于身份验证,LDAP用于权限

时间:2014-03-27 16:53:32

标签: authentication grails spring-security ldap x509

这里有一些指示比这更重要。

我试图让X509和LDAP在我的应用程序中运行。我希望用户使用他们的PKI证书进行身份验证,然后让APP从我们的LDAP服务器获取他们的权限。

我目前正在使用LDAP与客户userDetailsContextMapper合作,但是如何正确地添加x509会让我感到困惑。

我认为我想要的是使用注入的ldapUserDetails服务的PreAuthenticatedAuthenticationProvider。

我该怎么做?我是否需要UserDetailsByNameServiceWrapper来包装LdapUserDetailsS​​ervice以在预身份验证提供程序中使用?

我问,因为不幸的是,目前测试平台和开发环境已经分离,我没有设置本地LDAP或PKI进行测试,所以它大约需要6个小时的过程才能获得新的战争。开发环境......限制我知道......所以我想第一次就把它弄好。

干杯!

1 个答案:

答案 0 :(得分:0)

注意:以下是Spring-Security-Core v1.2.7.3的工作原理,配置名称在2.0RC2中有所不同

根据一些不同的想法,这就是我想出的。这假设您已经使用自定义LDAP和UserDetailsContextMapper(请参阅:ldap documentation):

确保LDAPPreAuthenticatedAuthentication提供商都在提供商列表中:

grails.plugins.springsecurity.providerNames = [
                                       'preAuthenticatedAutehnticationProvider',
                                       'ldapAuthProvider',
                                       'daoAutehnticationProvider',
                                       'anonymousAuthenticationProvider', 
                                       'rememberMeAuthenticationProvider']

然后在你的spring资源(grails-app/conf/spring/resources.groovy)中配置以下bean:

ldapUserDetailsService(org.springframework.security.ldap.userdetails.LdapUserDetailsService, 
                       ref('ldapUserSearch'),
                       ref('ldapAuthoritiesPopulator')) {
    userDetailsMapper = ref('ldapUserDetailsMapper')
}

userDetailsByNameServiceWrapper(org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper) {
    userDetailsService = ref('ldapUserDetailsService')
}

preAuthenticatedAuthenticationProvider(org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider) {
    preAuthenticatedUserDetailsService = ref('userDetailsByNameServiceWrapper')
}

然后揍你的叔叔,你有一些阿姨!

作为参考,我用来提出这个解决方案的页面是:

  1. No AuthenticationProvider found using spring security

      

    将LdapUserDetailsS​​ervice包装在UserDetailsByNameServiceWrapper中   而不是LdapAuthenticationProvider配置PreAuthenticatedAuthenticationProvider,它将能够处理CustomX509AuthenticationFilter发出的PreAuthenticatedAuthenticationToken。   将包装的LdapUserDetailsS​​ervice注入PreAuthenticatedAuthenticationProvider。

  2. http://blog.serindu.com/2011/05/26/grails-spring-security-using-preauthenticated-authentication-provider/ 介绍如何在grails中连接preAuthenticationAuthenticationProvider

  3. http://forum.spring.io/forum/spring-projects/security/108467-combine-pre-authentication-with-ldap-for-user-details-and-authorities

      

    有一个LdapUserDetailsS​​ervice可以完成LdapAuthenticationProvider所做的所有好事 - 除了身份验证

  4. http://pwu-developer.blogspot.co.uk/2012/02/grails-security-with-cas-and-ldap.html更多关于如何连接ldapUserDetailsS​​ervice的信息

  5. 希望这有助于其他人!