spring - 配置grails spring security ldap插件

标签 spring grails active-directory ldap

这是我的 Perl Cgi 脚本的一部分(正在运行......):

<小时/>
use Net::LDAP;
use Net::LDAP::Entry;
...
$edn = "DC=xyz,DC=com";
$quser ="(&(objectClass=user)(cn=$username))";
$ad = Net::LDAP->new("ip_address...");
$ldap_msg=$ad->bind("$username\@xyz.com", password=>$password);

my $result = $ad->search(       base=>$edn,
                            scope=>"sub",
                            filter=>$quser);
my $entry;
my $myname;
my $emailad;
my @entries = $result->entries;

foreach $entry (@entries) {
$myname = $entry->get_value("givenName");
$emailad = $entry->get_value("mail");
}
<小时/>

所以基本上,AD 没有管理员/经理帐户,用户凭据用于绑定(bind)。我需要在 grails 中实现同样的事情.. +有没有办法配置插件来搜索多个 AD,我知道我可以在 context.server 中添加更多 ldap IP,但对于每个服务器我需要不同的搜索库...

++ 我不想使用我的数据库,只想使用 AD。用户通过 ldap 登录 > 我收到他的电子邮件,并使用该电子邮件进行另一个 ldap 查询,但这可能是另一个主题:)

无论如何,到目前为止的代码是:

grails.plugin.springsecurity.ldap.context.managerDn = ''
grails.plugin.springsecurity.ldap.context.managerPassword = ''
grails.plugin.springsecurity.ldap.context.server = 'ldap://address:389'
grails.plugin.springsecurity.ldap.authorities.ignorePartialResultException = true 
grails.plugin.springsecurity.ldap.search.base = 'DC=xyz,DC=com'
grails.plugin.springsecurity.ldap.authenticator.useBind=true
grails.plugin.springsecurity.ldap.authorities.retrieveDatabaseRoles = false
grails.plugin.springsecurity.ldap.search.filter="sAMAccountName={0}" 
grails.plugin.springsecurity.ldap.search.searchSubtree = true
grails.plugin.springsecurity.ldap.auth.hideUserNotFoundExceptions = false
grails.plugin.springsecurity.ldap.search.attributesToReturn = 
            ['mail', 'givenName']
grails.plugin.springsecurity.providerNames= 
            ['ldapAuthProvider',anonymousAuthenticationProvider']


grails.plugin.springsecurity.ldap.useRememberMe = false
grails.plugin.springsecurity.ldap.authorities.retrieveGroupRoles = false
grails.plugin.springsecurity.ldap.authorities.groupSearchBase ='DC=xyz,DC=com'
grails.plugin.springsecurity.ldap.authorities.groupSearchFilter = 'member={0}'

错误代码为:[LDAP:错误代码 1 - 000004DC:LdapErr:DSID-0C0906E8,注释:为了执行此操作,必须在连接上完成成功的绑定(bind)。,数据 0,v1db1

对于我尝试的任何用户/通行证都是相同的代码:/ 嘿嘿! :)

最佳答案

对于 grails 和 AD,最重要的是使用 ActiveDirectoryLdapAuthenticationProvider 而不是 LdapAuthenticationProvider,因为它将避免痛苦的世界。为此,只需进行以下更改:

在 resources.groovy 中:

// Domain 1
ldapAuthProvider1(ActiveDirectoryLdapAuthenticationProvider,
        "mydomain.com",
        "ldap://mydomain.com/"
)

// Domain 2
ldapAuthProvider2(ActiveDirectoryLdapAuthenticationProvider,
        "mydomain2.com",
        "ldap://mydomain2.com/"
)

在 Config.groovy 中:

grails.plugin.springsecurity.providerNames = ['ldapAuthProvider1', 'ldapAuthProvider2']

这就是您需要的全部代码。您几乎可以删除 Config.groovy 中的所有其他 grails.plugin.springsecurity.ldap.* 设置,因为它们不适用于此 AD 设置。

文档: http://docs.spring.io/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ldap-active-directory

关于spring - 配置grails spring security ldap插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22097713/

相关文章:

active-directory - Active Directory 中用户的 LastLogonTimeStamp 值不正确

java - Spring JPA 与 ApplicationContext.xml、DAO 和 Service 为 NULL

spring - Spring Security如何在Grails中调用remoteFunction时重定向到登录

spring - Spring 有没有像温莎城堡那样的@predestroy

Grails:组织 i18n 包

azure - 如何在不弹出用户登录页面的情况下获取微软图形 token ?

java - 使用 LDAP/Java 启用 Active Directory 用户

java - Spring Boot 尝试解析不在我的 xml 中的 bean

grails - RestClient Grails 导入失败

grails - 在 Controller 中覆盖 Getter