2014-02-28 2 views
5
여기

내 펄 CGI 스크립트의 일부 보안 LDAP 플러그인을 봄 (노력하고 있습니다 ..) : 그러니까 기본적으로 구성 Grails는

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에서 같은 것을 구현할 필요가있다 .. + 여러 광고를 검색하는 플러그인을 구성하는 방법이 있는가, context.server에서 더 많은 LDAP IP를 추가 할 수 있지만 각 서버마다 다른 검색 기반이 필요하다는 것을 알고있다.

++ 나는 내 DB를 사용하고 싶지 않다. 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의 가장 중요한 점은 LdapAuthenticationProvider가 아닌 ActiveDirectoryLdapAuthenticationProvider를 사용하면 고통의 세계를 절약 할 수 있기 때문입니다. resources.groovy에서

: Config.groovy 파일에서

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

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

이렇게하려면, 단지 다음과 같이 변경합니다

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