7

Play2 for Java で webApp を作成していて、ユーザー認証に LDAP を使用したいと考えています... LDAP は初めてで、実際に LDAP がどのように機能し、Play でどのように使用するのか正確にはわかりません...

今のところ、おそらくこのトリックを実行するはずのこのプラグインを見つけましたが、LDAP 認証を使用する例を見つけることができません。最初の一歩を踏み出すのに役立つチュートリアルを知っていますか?

このブログ投稿も見つけましたが、これは良さそうですが、再生認証プラグインを使用していないため、それほど柔軟ではないのでしょうか? http://www.philipp.haussleiter.de/2013/07/adding-ldap-authentication-to-a-play-2-application/

4

1 に答える 1

5

LDAP と play フレームワークを使用してユーザーを認証する例があります。ここにコードがありますこれが役立つことを願っています

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

}

次に、コントローラーで上記のコードを次のように使用します。

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

}
于 2015-09-03T19:09:58.343 に答える