6

Ich schreibe eine WebApp mit Play2 für Java und möchte LDAP für die Benutzerauthentifizierung verwenden ... Ich bin neu bei LDAP und weiß eigentlich nicht genau wie es funktioniert und wie man es in Play verwendet ...Spielen! Framework Authentifizierung mit LDAP

für jetzt habe ich gefunden this plugin das sollte wahrscheinlich den Trick tun, aber ich kann kein Beispiel dafür finden, die LDAP-Authentifizierung verwendet. Kennen Sie ein Tutorial, das mir helfen könnte, die ersten Schritte zu machen?

Ich bin auch auf diesen Blogpost gestoßen, der gut aussieht, aber keine Play Authentication Plugins verwendet, also könnte es nicht so flexibel sein? http://www.philipp.haussleiter.de/2013/07/adding-ldap-authentication-to-a-play-2-application/

Antwort

4

Ich habe ein Beispiel, Benutzer mit LDAP und dem Play-Framework zu authentifizieren. Hier ist der Code Hoffnung, das wird helfen

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);       
    } 

} 

Dann in einem Controller verwende ich den obigen Code wie folgt:

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

Vielen Dank, werde ich es nächste Woche versuchen und halten Sie – behzad

+0

informiert was ist der Wert für DomainName? – behzad

+0

@behzad ist der Domänenname, den Sie in Ihrem Active Directory-Setup verwenden. zum Beispiel könnte es "foo.com" oder "mycompany.ca" sein. – Ubaidah

Verwandte Themen