1

オプションの OpenID 認証をシステムに追加しています。すべてが DotNETOpenID でスムーズに機能します。それでも、次の場合に問題が発生します。

  1. ユーザーは、標準のログイン (FormsAutentication) を使用して Web アプリケーションにログインします。
  2. ユーザーは、いくつかの OpenID をアカウントに関連付けます (ここでは、要求された ID を取得するために、プログラムによる OpenID ログオンを使用します)
  3. ユーザーは FormsAuthentication からログアウトし、OpenID で (ログイン コントロールを使用して) 再度ログインします。

最後のステップで、リプレイ アタック エラーが発生します。OpenID は、新しいリクエストを開始するのではなく、前のリクエストを取得するために使用されるアプリケーション ストア (リクエストに使用される) に一部の情報を保持していると思われます。

ここで問題に光を当てるのを手伝ってくれる人はいますか?

問題が私がそれをどのように理解したかである場合、プログラムによるログインを使用して OpenID をアカウントに正常にバインドした後、この特定の状態情報をクリーンアップするにはどうすればよいですか (要求が成功した場合)。

4

2 に答える 2

2

どのプロバイダーに対してテストしていますか? 正直なところ、openid.response_nonce の値を構成しているため、この場合、有罪の可能性が最も高い当事者のように思えます。もう 1 つの可能性が高いのは、(たまたま) 1 回目のログインと 2 回目のログインの間で URL のすべての openid.* クエリ文字列パラメーターを維持していることです。たとえば、ユーザーが OpenID を入力する前の 2 番目のログイン ページでは、openid.* パラメータがページの URL に含まれていますか? その場合、それが問題である可能性が高く、ログイン試行後にクリーンなリダイレクトを引き起こし、プログラム ページで修正できます。

于 2009-07-24T13:56:41.843 に答える
0

OK、実際の問題は、最初の OpenID 割り当ての瞬間とそれを使用した実際の認証の間に Session.Abandon() を追加した後 (および認証ロジックを少しクリーンアップした後) に解消されたようです。

于 2009-09-05T12:52:33.807 に答える