2013-04-02 5 views
16

Ich versuche, einen Benutzer über LDAP gegen Active Directory zu authentifizieren. Es folgt der Code-Schnipsel ich benutze:Was sind die akzeptierten SECURITY_PRINCIPAL-Formate für LDAP-Authentifizierung gegen Active Directory?

private DirContext bindAsUser(String bindPrincipal, String password) { 
    Hashtable<String,String> env = new Hashtable<String,String>(); 
    env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    env.put(Context.SECURITY_PRINCIPAL, bindPrincipal); 
    env.put(Context.PROVIDER_URL, bindUrl); 
    env.put(Context.SECURITY_CREDENTIALS, password); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
    env.put(Context.REFERRAL, "follow"); 

    try { 
     return new InitialLdapContext(env, null); 
    } catch (NamingException e) { 
     e.printStackTrace() 
    } 
} 

Der Code für die Bindung funktioniert, wenn ich zur Verfügung stellen:

  • Down-Level-Anmeldename, dh NetBIOSDomainName\sAMAccountName (zB Domäne \ Benutzername) oder
  • userPrincipalName (zB [email protected]) oder
  • distinguishedName (zB CN = Benutzername, OU = xxx, DC = abc, DC = com) oder
  • objectSid (zB S-1-5-21-3623 811015-3361044348-30300820-1013)

als SECURITY_PRINCIPAL, während es nicht bestanden, wenn sAMAccountName (z.B. benutzername) wurde verwendet (ich denke nur die Namen, die innerhalb der Gesamtstruktur eindeutig sind).

Was sind die akzeptierten Muster für SECURITY_PRINCIPAL? Ich habe ein paar ähnliche Fragen durchsucht, aber keine gibt einen Verweis auf offizielle AD/LDAP-Dokumente. Oder ist es eine Konfiguration, die ich irgendwo nachschlagen könnte? Vielen Dank!

+0

Hey @Fung, hast du irgendeine Lösung bezüglich der Verwendung von sAMAccountName bekommen, da ich auch das gleiche Problem habe? – sunder

Antwort

1

Ich denke, dass Sie LDAP Principal Template überprüfen müssen. Sie gibt die Hauptauthentifizierungsvorlage an, die von Ihrem LDAP-Server benötigt wird. Die Hauptauthentifizierungsvorlage ist das Format, in dem die Authentifizierungsinformationen für den Sicherheitsprinzipal (die Person, die sich anmeldet) an den LDAP-Server übergeben werden müssen. Der Standardwert ist $ {email}, das von Microsoft Active Directory benötigte Format. Andere LDAP-Server erfordern unterschiedliche Authentifizierungsvorlagen. Erkundigen Sie sich bei Ihrem Netzwerkadministrator, um mehr über Ihren LDAP-Server zu erfahren.