SimpleMembership を使用し、ユーザーが Google アカウントでサインインできるようにする ASP .NET MVC4 アプリケーションを使用しています。
そのために、この行のコメントを外して、アプリケーションの AuthConfig クラスを構成しOAuthWebSecurity.RegisterGoogleClient();
、外部ログイン メソッドとして google を追加しました。ASP .NET MVC4 インターネット アプリケーションテンプレートに既に付属している外部ログイン メソッドの内部は、あまり変更していません。
問題:
ローカルで実行する場合 (IIS エクスプレス)、または「テスト」サーバー (IIS 6.1、イントラネットでのみアクセス可能) に展開すると、すべて正常に動作します。[Google でサインイン] ボタンをクリックすると、Google の認証ページに移動します。その URL は次のようになります。
https://accounts.google.com/ServiceLogin?service=lso&passive=12096...(long url)
残念ながら、それを「本番」サーバー (インターネットに面している) にデプロイしてインターネット経由でアクセスしようとすると、Google 認証が機能しなくなります。「Google でサインイン」をクリックすると、次のような URL に送信されます。これ:
http://MY_APPLICATION_NAME.MY_DOMAIN.com/accounts/o8/ud?openid.claimed_id=http%3A%2F%2Fspecs.openid...(long url)
この URL が間違っているのは、私のドメインが含まれているため (accounts.google.com である必要があると思いますか?)、認証が機能したときに取得した URL と残りの部分が完全に異なるためです。
私が知っていることと試したこと:
フィドラーを使用すると、インターネットまたはイントラネット経由でアプリケーションにアクセスしているときに、アプリケーションの動作が異なることがわかります。
- ネットワーク内からアクセスすると、 にリクエストを送信していることがわかり
http://MY_APPLICATION_NAME.MY_DOMAIN.com/account/ExternalLogin?returnUrl=
ます"Tunnel to www.google.com:443, Tunnel to accounts.google.com:443"
。これは正常に動作します。 http://MY_APPLICATION_NAME.MY_DOMAIN.com/account/ExternalLogin?returnUrl=
インターネットからアクセスすると、 にリクエストを送信し、次に に別のリクエストを送信していることがわかりますhttp://MY_APPLICATION_NAME.MY_DOMAIN.com/accounts/o8/ud?openid.claimed_id=http%3A%2F%2Fspecs.openid...(long url)
。これは明らかに 404 を返します。
私は間違っているかもしれませんが、この URL はOAuthWebSecurity.RequestAuthentication(provider, returnUrl)
. 私を困惑させているのは、accounts.google.com ではなく、サーバーへの認証を要求しているように見えることです。
これまでの私の調査では、投稿/質問/などしか得られませんでした。外部認証に SimpleMembership を使用するのがいかに簡単かを示しており、誰もがほぼ同じ方法でそれを行っていることがわかります。
結論:
これはおそらく、web.config または IIS で構成する必要があるものと関係があると思います。これが問題に関連しているかどうかはわかりませんが、アプリケーションへのリクエストが DNS サーバーに到着し、DNS サーバーが URL を書き換えてリクエストを Web サーバーに転送することはわかっています。
何が間違っているのか、または同様の問題があったことを知っている人はいますか? どんな助けでも大歓迎です。
編集:
OpenAuthSecurityManager.csのソース コードを調べましたが、デバッグはできませんが、IIS のリバース プロキシ設定が原因で、問題が RequestAuthentication メソッド内の正しくない HttpContext に関連している可能性がありますか?