用于身份验证的 Grails Spring Security X509 和用于权限的 LDAP
Posted
技术标签:
【中文标题】用于身份验证的 Grails Spring Security X509 和用于权限的 LDAP【英文标题】:Grails Spring Security X509 for Authentication and LDAP for Authorities 【发布时间】:2014-05-06 19:29:48 【问题描述】:这里需要一些指针。
我正在尝试让 X509 和 LDAP 在我的应用程序中工作。我希望用户使用他们的 PKI 证书进行身份验证,然后让 APP 从我们的 LDAP 服务器获取他们的权限。
我目前有 LDAP 与客户 userDetailsContextMapper 合作,但是如何正确添加 x509 让我有点难过。
我想我想要的是一个使用注入的 ldapUserDetails 服务的 PreAuthenticatedAuthenticationProvider。
我该怎么做?我是否需要 UserDetailsByNameServiceWrapper 来包装 LdapUserDetailsService 以在预身份验证提供程序中使用?
我之所以问是因为不幸的是,目前的测试平台和开发环境是分离的,而且我没有设置本地 LDAP 或 PKI 来进行测试,所以它大约需要 6 小时的过程才能对开发环境产生新的战争...限制性我知道...所以我想第一次做对。
干杯!
【问题讨论】:
【参考方案1】:注意:以下适用于 Spring-Security-Core v1.2.7.3,配置名称在 2.0RC2 中有所不同
根据几个不同的想法,这就是我想出的。这假设您已经使用自定义的 LDAP 和 UserDetailsContextMapper
(请参阅:ldap documentation):
确保LDAP
和PreAuthenticatedAuthentication
提供程序都在提供程序列表中:
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')
还有鲍勃你的叔叔,你还有一些阿姨!
作为参考,我曾经提出此解决方案的页面是:
No AuthenticationProvider found using spring security
将您的 LdapUserDetailsService 包装在 UserDetailsByNameServiceWrapper 中 代替 LdapAuthenticationProvider 配置 PreAuthenticatedAuthenticationProvider 将能够处理您的 CustomX509AuthenticationFilter 发出的 PreAuthenticatedAuthenticationToken。 将封装好的 LdapUserDetailsService 注入 PreAuthenticatedAuthenticationProvider。
http://blog.serindu.com/2011/05/26/grails-spring-security-using-preauthenticated-authentication-provider/ 介绍如何在 grails 中连接 preAuthenticationAuthenticationProvider
http://forum.spring.io/forum/spring-projects/security/108467-combine-pre-authentication-with-ldap-for-user-details-and-authorities
有一个 LdapUserDetailsService 可以完成 LdapAuthenticationProvider 所做的所有好事 - 除了身份验证
http://pwu-developer.blogspot.co.uk/2012/02/grails-security-with-cas-and-ldap.html 详细了解如何连接 ldapUserDetailsService
希望这对其他人有帮助!
【讨论】:
以上是关于用于身份验证的 Grails Spring Security X509 和用于权限的 LDAP的主要内容,如果未能解决你的问题,请参考以下文章
Grails Spring Security 验证多个 url 的访问
Grails - Spring 安全 ldap 活动目录身份验证 - 凭据错误错误
如何为每个 url 配置 grails/spring 身份验证方案?