2016-10-14 155 views
1

我是新的活動目錄和彈簧安全性,實際上,我想更改我的彈簧安全配置,以便在驗證中使用活動目錄,因此我在我的SecurityConfig中使用此目錄:LDAP:錯誤代碼34 - 錯誤的DN給出

@Autowired 
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
    auth.authenticationProvider(activeDirectoryLdapAuthenticationProvider()); 
    auth.eraseCredentials(false); 

} 

@Bean 
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() { 
    ActiveDirectoryLdapAuthenticationProvider authenticationProvider = new ActiveDirectoryLdapAuthenticationProvider(
      "dc=example,dc=com", "ldap://localhost:10389/dc=example,dc=com"); 

    authenticationProvider.setConvertSubErrorCodesToExceptions(true); 
    authenticationProvider.setUseAuthenticationRequestCredentials(true); 
    authenticationProvider.setUserDetailsContextMapper(mapper); 

    return authenticationProvider; 
} 

和active directory studio我有一個分區:dc=example,dc=com其中包含一個條目ou=people

當我試圖把用戶名和密碼,我有這樣的錯誤:

javax.naming.InvalidNameException: [LDAP: error code 34 - Incorrect DN given : [email protected]=example,dc=com (0x73 0x79 0x73 0x61 0x64 0x6D 0x69 0x6E 0x40 0x64 0x63 0x3D 0x70 0x75 0x70 0x70 0x75 0x74 0x2C 0x64 0x63 0x3D 0x63 0x6F 0x6D) is invalid] at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:3076) at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2883) at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2797)..

你有什麼想法嗎?

+0

如果你在Mac上,請確保你的build.xml文件中沒有任何'"' – Archmede

回答

0

ActiveDirectoryLdapAuthenticationProvider旨在讓您使用特定於AD的表格[email protected]中的用戶名進行身份驗證,該格式不是標準的LDAP DN格式。因此,構造函數中的第一個參數應該是域(example.com)而不是LDAP DN。當您登錄爲admin時,代碼使用配置的域來構建字符串[email protected]並將其傳遞給AD。

由於您使用的是dc=example,dc=com作爲域名,因此以[email protected]=example,dc=com結尾,這是無效的。

+0

謝謝你的回答,但是我之前試過並且我有同樣的錯誤[LDAP:error code 34 - 給出的DN不正確:[email protected] – FoufaFaFa

+0

我仍然有相同的錯誤:/ – FoufaFaFa

+0

'user @ domain'名稱格式只適用於AD配置爲進行身份驗證的域。它在底層使用LDAP幾乎是毫不相干的。如果你已經創建了一些其他分區,我懷疑它是否可行,你將不得不使用普通的LDAP方法。 –