Java で Kerberos を使用してシングル サインオンを実装したいと考えており、Windows ログオンのチケットを使用してサービスのチケットを作成することに成功しました。残念ながら、レジストリ キー「allowtgtsessionkey」が有効になっている場合にのみ、そのチケットを作成できます。無効にするとすぐに、「識別子が期待値と一致しません (906)」というメッセージの例外が発生します。レジストリ キーについては、http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.htmlおよびhttp://support.microsoft.com/kb/308339に記載されています。
残念ながら、アプリケーションが使用されるコンピューターのレジストリにアクセスできないため、変更せずにこれを行う方法を探しています。Internet Explorer または Mozilla Firefox で SPNEGO 経由でシングル サインオンを行うと、チケット キャッシュにサービス チケットが作成されるため、レジストリ キーを設定せずにこれを行う方法が必要です。Javaでこれを行う方法を知っている人はいますか?
助けてくれてありがとう、メミンガー
更新: 私はこの問題をあきらめています。Windows レジストリ キーは、チケット キャッシュ内のチケット (より正確にはサブジェクト) へのアクセスを防ぎます。Windows 上の Java は独自の GSSAPI 実装を使用しており、サービス チケットを作成するにはチケットにアクセスする必要があると思います。ただし、SSPI Windows API はチケット キャッシュに完全にアクセスできるため、サービス チケットを作成できます。この API は Web ブラウザーで使用されますが、Java では使用されません ( http://java.sun.com/developer/technicalArticles/J2SE/security/#3によると)。Web ページに 1 回アクセスした後に Firefox で SSPI を無効にすると (サービス チケットが作成されます)、そのページには引き続きアクセスできるため、SPPI API を使用してサービス チケットを作成するコマンド ライン ユーティリティで十分でしょう。
私たちにとって、これは、シングル サインオンを放棄するか (これは受け入れられません)、アプリケーションのクライアント側で認証を行うことができるようになったことを意味します (ユーザー名を読み取ることしかできず、チケットを検証することはできないため)。サーバー)、これは主要なセキュリティ リスクです。より強力なセキュリティ制約が、使用するには複雑になりすぎて、より大きなセキュリティ ホールにつながる別の例です。