2010-12-14 31 views
0

私はSpring LDAP(1.3.1)を使用してADAMとActive Directoryと通信しています。Spring LDAP認証に失敗しました。エラーコード

私はldapTemplate.authenticate()私はエラーコールバックを経由してエラーを取り戻すを使用して誰かを認証しようとするが、それは非常に汎用的な例外含むAuthenticationExceptionを与え、私は正確に問題が何であるかを抽出することはできません時:

  • アカウント無効
  • パスワードが
  • は、アカウントが
  • など
  • 期限切れ
  • 次回ログイン時にパスワードを変更する必要があります期限切れ

私が帰ってきたのは、ADが返すものと思われるdetailMessageです。以下のような何か:

org.springframework.ldap.AuthenticationException: [LDAP:エラー・コード49 - 8009030C: LdapErr:DSID-0C0903A9、コメント: AcceptSecurityContextエラー、データ773、 v1db0

データ773が表示されます。これは、次回のログイン時にユーザーがパスワードを変更する必要があることを意味します。私は手動でこれを解析したくありません。私が気づいていない "アダプター"はありますか?

誰もこの問題を抱えていましたか?

ありがとうございます!

答えて

2

This linkは、ldapエラーコードがJNDI例外にどのようにマップされるかを示しています。春のLDAPコードを見ると、JNDIの各例外をカスタムLDAP例外(LdapUtils.convertLdapException()

にマッピングするようになりました。現在、773はActive Directoryに特有のようです。したがって、必要に応じて、これを明示的にユーザーが処理する必要があります。 This linkには、一連のActive Directoryエラーが一覧表示されます。 Springのldapはこのテキストをエラーの詳細に提供し、ユーザーに適切なものとして使用させます。

0

コードがPasswordPolicyAwareContextSource.getContext または同様のスプリングコードで終わる場合、Springはそれを非常にうまく処理しません(バグ)。
アカウントが期限切れになると、例外がスローされます。上記のクラスはこの例外 をキャッチし、これがキーです。
PasswordPolicyResponseControl ctrl = PasswordPolicyControlExtractor.extractControl(ctx);
その後、Springはctrl.isLocked()を呼び出しますが、他の条件のチェックに失敗します。 Springのコードをオーバーライドして、ctrl.isExpired()、ctrl.isChangeAfterReset()をチェックすることができます。その時点で他の情報ゲッターが利用できます

関連する問題