2017-11-03 7 views
2

が、私はSpring Security + Auth LDAP:BindRequestとUnbindRequest? Googleは、研究F *春のセキュリティマニュアルとテストを読み取る日後

...コンテキスト必死になっている:私はユーレカなどとマイクロサービスアーキテクチャを実装しています... I MySQL認証データベースでうまく動作する認証サービスを実装しました。しかし今、私は適切に働くOpenLDAPを通して私の会社のLDAPに加わりたいと思っています。

私は春のセキュリティ認証でLDAPに参加しようとしています。

私のconfigureのコード()メソッド(私は、アカウントを私の会社とドメイン名を置き換え{0}「テスト」です):

auth.ldapAuthentication() 
     .contextSource() 
     .url("ldap://myldap/ou=users,dc=mydomain,dc=mycompany") 
    .and() 
     .userDnPatterns("cn={0}"); 

また、私はこれを書いて、すべてのためのさまざまな方法を試してみました無効な資格情報またはLDAP 32エラーが表示されます。 userDnPattern、usersearchbaseメソッド、passwordcompare、passwordencoderなど。私はDCをroot()メソッドとOUをgroup ...()メソッドに入れようとしましたが、変更はありません(Spring SecurityがLDAPリクエストを送信する前にこれらのパラメータをスマートにソートすると思います)。正直言って、私はconfigure()メソッドを書くために357654 differentsの方法を試しました...

問題は:私が同じ設定、資格情報、ドメイン...をLDAPエクスプローラソフトウェアに入れたら、は動作します正しく

だから私はWiresharkのでLDAPネットワークの交換を監視し、私はこれを見た:私たちが見ることができるように Wireshark screen

を、8つの要求があっ交換しています。最初の5つはOKです。それは私のアカウント "テスト"を正しく見つける。しかし、3つ以上のリクエストがあります(unbindRequestが戻る)。

問題は、春は私の最後の要求の結果を与え、私はアカウントが存在しないか、資格情報が機能しないと言う、など...

あなたは、このための手掛かりを持っているということでしょうか? Spring SecurityがどのようにLDAPに質問するのか知っていますか?私のLDAPとフレームワークを適切に連絡するにはどうすればよいですか?

ありがとうございます。

は、スタックオーバーフローが、あなたが私の唯一の希望だ...

答えて

2

は私が最終的に問題を発見し、解決策を持って私を助けて。

私のエンタープライズLDAPは、広告の上にあるLDAPです。

このLDAP + ADはバインド認証を必要とし、認証後に匿名バインドを承認しません。春のセキュリティで

は、これを行うことができますオブジェクトがあります:BindAuthenticator

これは、私はそれを使用しよう(とそれが動作する)方法です。

@Override 
protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception { 
     authManagerBuilder.authenticationProvider(ldapAuthenticationProvider()).userDetailsService(userDetailsService()); 
} 

@Bean 
public LdapAuthenticationProvider ldapAuthenticationProvider() throws Exception { 
     LdapAuthenticationProvider lAP = new LdapAuthenticationProvider(ldapAuthenticator(), ldapAuthoritiesPopulator()); 
     return lAP; 
} 

@Bean 
public LdapContextSource ldapContextSource() throws Exception { 
     DefaultSpringSecurityContextSource contextSource = new DefaultSpringSecurityContextSource([URL of the LDAP]); 

     return contextSource; 
} 

@Bean 
public LdapAuthenticator ldapAuthenticator() throws Exception { 
     BindAuthenticator authenticator = new BindAuthenticator(ldapContextSource()); 
     authenticator.setUserDnPatterns(new String[] {"CN={0},"+[MY ENTERPRISE LDAP FILTER]});   
     return authenticator; 
} 

このサンプルコードでは、一部の人々を助けることを願っています...

ありがとうございました!

関連する問題