2016-10-03 35 views
0

私は問題に直面しています。できるだけ早くこの問題を解決する必要があります。Java LDAP - ユーザーを認証できません

私は

号-1だけLDAPユーザのサンプル認証のための非常に単純なJavaプログラムを持っている - :

public static void main(String[] args) throws NamingException { 

     final String ldapAdServer = "ldap://0.0.0.0:389"; 


     final String ldapUsername = "uid=test,ou=People,dc=example,dc=com"; 
     final String ldapPassword = "gdyb21LQTcIANtvYMT7QVQ=="; 


     Hashtable<String, Object> env = new Hashtable<String, Object>(); 
     env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
     if (ldapUsername != null) { 
      env.put(Context.SECURITY_PRINCIPAL, ldapUsername); 
     } 
     if (ldapPassword != null) { 
      env.put(Context.SECURITY_CREDENTIALS, ldapPassword); 
     } 
     env.put(Context.INITIAL_CONTEXT_FACTORY, 
       "com.sun.jndi.ldap.LdapCtxFactory"); 
     env.put(Context.PROVIDER_URL, ldapAdServer); 

     env.put("java.naming.ldap.attributes.binary", "objectSID"); 
     DirContext ctx = new InitialDirContext(env); 

    } 

上記のプログラムを実行するには、「[LDAPを与える:エラーコード49 - 無効資格]] "エラーまた、私はLDAPのユーザーのエクスポートを取って、userPasswordはプログラムに入力されたものと同じです

dn: uid=test,ou=People,dc=example,dc=com objectClass: person objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: top uid: test mail: [email protected] userPassword: {MD5}gdyb21LQTcIANtvYMT7QVQ==

上記の入力済みのパスワードとjavaコードがエラーを発生していますdsconfigを使用してMD5を使用するために "default-password-storage-scheme"を設定しています。 MD5の16進パスワードをLDAPに渡して認証を受ける。

Issue- 2 - :私たちはバックエンドシステムとしてのLiferayを使用していて、ユーザーがパスワードのLiferayを変更している場合は、すべてのユーザーの詳細は、LDAPに格納されている必要があり は、この「098f6bcd4621d373cade4e832627b4f6 」のようなものをMD5を使用してパスワードを生成し、進エンコーディングされているが、エクスポートldiffオプションを使用してエクスポートしたときと同じときに、私たちはldap "{MD5} gdyb21LQTcIANtvYMT7QVQ =="のようになります。liferayとldapのパスワードの間に不一致があります。liferay md5パスワードをldapに入れます。 同じパスワードを入力してldiffファイルを取得し、javaプログラムに同じパスワードを入力しても機能しないようで、プレーンテキストのパスワードが機能します。

これについて深刻な助けが必要です。

追加情報が必要な場合は、お気軽にご相談ください。

答えて

3

コードに問題はありません。問題は、OpenDJがハッシュ値ではなくクリアテキストパスワード(あなたが使っているもの)を期待していることです。

OpenDJは(バインド要求は、ユーザーがLDAPサーバーに対して認証を行う方法です)バインド要求を受け取ると、それは、要求からパスワードをつかむハッシュ値を計算し、にuserPassword属性に格納された値に対してそれを比較します(gdyb21LQTcIANtvYMT7QVQ ==)。 OpenDJは、もともと使用されていたハッシュアルゴリズム(MD5、SHA1など)を前置していることに注意してください。

平文パスワードを使用すると、の問題1が修正されるはずです。

上記の説明には、何が起こっているかについてのいくつかの光が必要です。Issue 2。 LiferayはOpenDJののuserPassword属性を変更するときにパスワードハッシュを渡しています。しかし、OpenDJはクリアテキスト値を受け取っているので、パスワードを再度ハッシュすると考えています。したがって、LDAPサーバーには「二重ハッシュ」のパスワードがあります。

あなたは問題2を解決するには、2つのオプションがあります。

  • のLiferayにハッシングを無効にしてOpenDJは、ハッシュを行うことができます。
  • LDAPで事前にエンコードされたパスワードを許可し、バイナリ形式でパスワード値を渡すようにLiferayを設定します。事前にエンコードされたパスワードを許可するには、allow-pre-encoded-passwords拡張パスワードポリシープロパティをに設定する必要があります。。私はLiferayの設定であなたを助けることができないのではないかと心配しています。
+0

こんにちは、我々はすでにLDAPへのLiferay DBからインポートされるべきであり、そのパスワードは、今私は、このシナリオLiferayは六角でMD5を使用して処理しない方法をハッシュされる40以上の数百万人のユーザーを持つissue1ための即時応答をありがとうバイナリ形式の場合、ベース64エンコーディングを意味しますか? – ravicandy1234

関連する問題