2014-02-28 57 views
5

這裏是我的Perl CGI腳本的一部分(這是工作..):配置Grails的Spring Security的LDAP插件


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,用戶憑證用於綁定。我需要在grails中實現同樣的事情。 +有沒有一種方法來配置插件來搜索幾個AD,我知道我可以在context.server中添加更多的ldap IP,但是對於每個服務器我需要一個不同的搜索基礎..

++我不想用我的DB,只是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,註釋:爲了執行此操作,必須在連接上成功完成綁定。數據0,v1db1

而且它與任何用戶/通行證我嘗試:/ Heeeeelp! :)

+0

存在丟失的引號和左括號您providerNames名單上。不知道這是否會起作用。 – grantmcconnaughey

+0

對不起,複製時出錯,行是:grails.plugin.springsecurity.providerNames = ['ldapAuthProvider','anonymousAuthenticationProvider'] – user1611228

回答

2

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

相關問題