3

Windowsユーザーの資格情報を取得し、UNIXボックスのkerberosに接続して認証し、LDAPサーバーなどのサービスを使用できるようにするJAVAプログラムを作成しようとしています。

私が見つけたすべての例は、実行時にパスワードを要求する傾向があります。これは必要ありません。プログラムを実行し、「魔法の場合」im kerberos 認証できるようにしたいのです。

リンクと例は大歓迎です。

4

1 に答える 1

7

何週間にもわたる試行と Web クロールの後、Java EE アプリケーションで Kerberos を使用し、Windows Active Directory に対して認証することで、SSO のセットアップに成功しました。

JBOSS Negotiation と Spring Kerberos の両方が機能しました。ただし、両方のドキュメントのセットは、すぐに実行できるほど正確ではありません。どちらのソリューションも簡単に言えば...

  1. Active Directory でサービス ユーザーを作成します。
  2. ktpass を使用して、このユーザーのキータブ ファイルを作成します。(以下にリストされているように、ktpass には多くの問題があります)
  3. setspn -A を使用して ktpass を修正します。
  4. krb5.conf (Linux) または krb5.ini (Windows) が正しいことを確認してください。
  5. サーバーと同じボックスでクライアントを実行していないことを確認してください。
  6. ドメイン全体で時刻が同期されていることを確認してください。
  7. JDK で kinit を使用して Kerberos をテストします。
  8. 提供されたフィルターを介して認証を委任するように Web アプリケーションを構成します。
  9. 最初に作成された適切なサービス プリンシパル ユーザーを使用するように XML ファイルを構成します。
  10. プリンシパル ユーザーとしてサービスを実行します!!!!!!!!!
  11. Spring を使用している場合は、UserDetailsS​​ervice を実装して LDAP (アクティブ ディレクトリ) にクエリを実行し、ユーザー プリンシパルにロールを設定できます。
  12. アプリケーション内から、ユーザー プリンシパルは !=null にする必要があります。

ktpass の問題:

  1. サービス ユーザーが Active Directory でユーザーがパスワードを変更できないように設定されていることを確認します。
  2. コマンドラインでパスワードを指定してください。
  3. キータブを生成した後も、そのユーザーとしてコマンド プロンプトを開くことができることを確認してください。
  4. KRB5_NT_PRINCIPAL を必ず指定してください。
  5. フォーマットはktpass /out c:\service.keytab /mapuser userservice@TESTDOMAIN.SERVER.COM /princ HTTP/hostname@TESTDOMAIN.SERVER.COM /pass /ptype KRB5_NT_PRINCIPAL
  6. 次のように、setspn -A を使用して完全修飾サービス プリンシパルを追加します。 setspn –A HTTP/hostname.testdomain.server.com userservice
  7. サービス プリンシパル ユーザーのパスワードをリセットしないでください (キータブを再生成する必要があります)。

最後に、すべてのテストの前に、kinit purge を使用してキャッシュされたチケットをクリアします。

また、SPN が重複していると、事態が悪化します。Windows Server 2008 の setspn -X はこれ (またはスクリプトの場合は google) を検出します。これを行うときに疑わしい場合は、毎回新しいサービス ユーザーとプリンシパル名でやり直してください。

これが誰かが私が経験した痛みを避けるのに役立つことを願っています.

于 2012-05-18T13:35:41.310 に答える