6

Piszę webApp z Play2 dla Javy i chcę używać LDAP do uwierzytelniania użytkownika ... Jestem nowy w LDAP i tak naprawdę nie wiem dokładnie jak to działa i jak go używać w Play ...Graj! Framework Authentication with LDAP

na razie znalazłem this plugin, który powinien prawdopodobnie zrobić lewę, ale nie mogę znaleźć żadnego przykładu, który używa uwierzytelniania LDAP. znasz jakiś samouczek, który może mi pomóc podjąć pierwsze kroki?

Natknąłem się na ten wpis na blogu, który wygląda dobrze, ale nie używa wtyczek do uwierzytelniania gry, więc może nie być tak elastyczny? http://www.philipp.haussleiter.de/2013/07/adding-ldap-authentication-to-a-play-2-application/

Odpowiedz

4

Mam przykład uwierzytelniania użytkownika przy użyciu LDAP i ramy gry. Oto kod nadzieję, że pomoże

public class ActiveDirectoryServices { 

    public static final String ldapURL = Play.application().configuration().getString("ActiveDirectory.url"); 
    public static final String domainName = Play.application().configuration().getString("ActoveDirectory.DomainName"); 
    public static final int timeout =   Play.application().configuration().getInt("ActoveDirectory.timeout"); 

    public static Promise<Boolean> authenticate(String username, String password) throws AuthenticationException, CommunicationException, NamingException{ 

    Hashtable<String, String> env = new Hashtable<String,String>();  

    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
    env.put("com.sun.jndi.ldap.connect.timeout", ""+(timeout*1000)); 
    env.put(Context.PROVIDER_URL, ldapURL); 
    env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    env.put(Context.SECURITY_PRINCIPAL, username+domainName); 
    env.put(Context.SECURITY_CREDENTIALS, password); 

    DirContext authContext = null; 
    authContext = new InitialDirContext(env);   
    return Promise.pure(Boolean.TRUE);       
    } 

} 

Następnie w kontroler Używam powyższy kod w następujący sposób:

try { 

    Promise<Boolean> promiseActiveDirectoryCheck = ActiveDirectoryServices.authenticate(userName, password); 
     return promiseActiveDirectoryCheck.flatMap(response -> { 

     if(response){       
     return Promise.pure(ok("access granted")); 
     } 


    }); 

}catch (AuthenticationException exp) { 
    return Promise.pure(ok("access denied")); 

}catch (CommunicationException exp) { 
    return Promise.pure(ok("The active directory server is not reachable")); 

}catch (NamingException exp) { 
    return Promise.pure(ok("active directory domain name does not exist")); 

} 
+0

Bardzo dziękuję, będę go spróbować w przyszłym tygodniu i będzie na bieżąco informowany – behzad

+0

co to jest wartość dla domainName? – behzad

+0

@behzad to nazwa domeny, której używasz w aktywnej konfiguracji katalogu. na przykład może to być "foo.com" lub "mojafirma.pl". – Ubaidah