2

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 に関連している可能性がありますか?

4

1 に答える 1

0

結局、IT インフラストラクチャの変更を依頼することになりました。OpenAuthSecurityManager.cs はおそらく、以前のインフラストラクチャによって要求が処理されていた方法が原因で、間違った HttpContext インスタンスを取得していました (要求は DNS サーバーに到着し、UrlRerwrite ルールを使用して、ネットワーク内の別のサーバー上の Web サービスに転送されました)。 .

それは今働いています。

于 2013-10-02T13:23:20.833 に答える