私のコードは現在、私の Web サイトのユーザーに対して SPNEGO (Kerberos) 認証を実行しても問題なく動作します。ユーザーの身元の確認に基づいていくつかの決定を加速するために、特別なキャッシュメカニズムが用意されています。単純なパスワード認証の場合、これは非常に簡単です。「現在の」ユーザーとパスワードの組み合わせを「古い」ものと比較します。変更がない場合、決定は引き続きキャッシュできます。それ以外の場合は、再評価する必要があります。
Kerberos についても同じことをしようとしています。私はそれをほとんど機能させましたが、なぜGSSCredential.equals()
機能しないのか困惑しています。特に、各リクエストを認証した後に取得した GSSCredential インスタンスは、同じユーザー、同じサービス、同じ状況で取得されたものであるという点で「同一」です (と思います)。a を実行しtoString()
て出力を比較すると、それらは同じです (はい、これは無関係であることはわかっていますが、おそらく等しいはずであるということはまだ良い兆候です)。
ただし、GSSCredential_1.equals(GSSCredential_2)
リクエスト間では常に false を返します。これは、それぞれが異なる SPNEGO チケット (リプレイ シナリオを回避するために Kerberos に従って必要) を使用して取得されている可能性がありますが、それらのチケットは依然として同じプリンシパルに属しており、同じサービス プリンシパルを「対象」としていました。
私が行う必要があるコードの決定は、次のように表現するのが最適です。
これらの新しい資格情報は、以前に使用されたものと同じセキュリティ プリンシパルを表していますか? 有効期限、目的に対する有効性などの問題は、個別に評価され、後で評価されます。
それらの名前を比較すると「うまくいきます」が、もう少し堅牢なものを望んでいました。
何か案は?