私のコードは現在、自分のWebサイトのユーザーに対してSPNEGO(Kerberos)認証を実行しています。私は、ユーザーの身元の確認に基づいていくつかの決定を加速する特別なキャッシュメカニズムを用意しています。単純なパスワード認証の場合、これは簡単です。「現在の」ユーザーとパスワードのコンボを「古い」パスワードのコンボと比較します。変更がなければ、依然としてキャッシュできます。それ以外の場合は、再評価する必要があります。Java GSSAPI:2つのGSSCredentialインスタンスの比較
私はKerberosで同じことをしようとしています。私はそれが主に働いているが、私はなぜGSSCredential.equals()
がうまくいかないとうんざりしている。特に、私が各リクエストを認証した後に取得するGSSCredentialインスタンスは、同じユーザー、同じサービス、同じ状況(たとえ)で取得されたものであっても同じです。 toString()
を実行して出力を比較すると、それらは同じです(はい、これは無関係ですが、それでも同じでなければならないという良い指標です)。
ただし、GSSCredential_1.equals(GSSCredential_2)
は、要求間に常にfalseを返します。これは、それぞれが異なるSPNEGOチケット(リプレイシナリオを避けるためにKerberosのように必要です)を使用して取得されたものですが、それらのチケットは同じプリンシパルに属し、同じサービスプリンシパルに「目標」されているためです。
私は最高のような関節結合されていることを確認する必要があるコードの決定:
は、これらの新しい資格情報が以前に使用したものと同じセキュリティプリンシパルを表していますか?期限切れ、目的のための妥当性およびその他のものの質問は、別々に評価されます。
名前を比較すると「うまくいく」と思っていましたが、もう少し頑強なものを望んでいました。
アイデア?
名前を比較するよりも優れているとは思えません。それが失敗するシナリオがありますか? –