2

同じドメインでサブドメインが異なる.NET2.0サイトと.NET4.0サイトの間でSSOを実行しています。単一のマシンの開発環境ではすべて正常に機能しますが、4.0の実稼働サイトで2.0の実稼働サイトによって生成された認証Cookieを受け入れることができません。これらの2つのサイトは別々のサーバー上にあり、1つは2.0フレームワークのみがインストールされたIIS 6を実行し、もう1つは4.0フレームワークがインストールされたIIS7.5を実行しています。<machineKey>要素と要素の問題を指摘する他の質問に対する他のすべての回答を読みました<authentication><forms>。信頼してください。これらはすべて適切に設定されており、4つのサイトすべてがこれらの要素に対してまったく同じプロパティ値を持っています。

最初は暗号化の問題だと思っていましたが、Fiddlerで何が起こっているのかを詳しく見てみると、認証Cookieがリクエストで正しく渡されていることがわかりましたが、ある時点で消えてしまったようです。 Request.Cookiesコレクションで利用できます。

4.0の本番サイトはロードバランサーの背後にありますが、現在Webファームにオンラインの他のサーバーはありません。ロードバランサーが何らかの理由でCookieをドロップしている可能性がありますか?有効な認証Cookieではないため、CookieはRequest.Cookiesコレクションに追加されませんか?もしそうなら、なぜそれは有効ではないのですか?

要約すると、要求されたページで以下を実行すると、次のようになります。

HttpCookie AuthCookie = Request.Cookies.Get(".SSOAUTH");

Fiddlerのリクエストヘッダーにその名前のCookieが表示されていても、AuthCookieはnullです。

4

3 に答える 3

5

サーバーごとに暗号化アルゴリズムが異なるため、認証チケットが有効でない場合があります。これは、一部のMSセキュリティ更新が一方のサーバーに適用され、もう一方のサーバーには適用されない場合に発生する可能性があります。Cookieに有効な値が含まれていない場合、CookieはRequest.Cookiesリクエストで渡されても、コレクションに追加されません。

于 2012-07-16T21:26:22.990 に答える
2

これを引き起こす可能性のあるものについて、別のオプションを追加したかっただけです。.NET4.0WebFormsアプリと.NET4.5MVCアプリの間にシングルサインオンの問題を実装するのにほぼ2日を費やしました。
あなたのように、私はmachineKeyauthentication要素が適切に構成されていると確信していました。しかし、Forms Authentication Cookieがブラウザーによって送信されているのに、4.5アプリのRequest.Cookiesには表示されていないことがわかりました。

それから私はこれを見つけました:http: //www.shawnmeyer.com/2013/10/sharing-forms-authentication-tickets-between-applications/

そしてこれ: FormsAuthenticationSSO-なぜUser.Identity.IsAuthenticated==falseなのか

これは、FormsAuthenticationCookie検証の失敗を解決する2つの異なる方法を提供します。

基本的に、httpRuntimeすべてが同じバージョンのフレームワークをターゲットにしていることを確認するか、新しいWebアプリのにcompatibilityModeを追加する必要があります。machineKeyどちらの方法でもうまくいきました-4.5アプリで、次のいずれかを変更します。

<httpRuntime targetFramework="4.0" />

また

<machineKey validationKey="..."
                decryptionKey="..."
                validation="SHA1" decryption="AES" compatibilityMode="Framework20SP2"/>
于 2015-02-17T17:05:32.947 に答える
0

IISのログにCookieを追加して、ロードバランサーを通過していることを確認できます。

また、ばかげていることは知っていますが、代わりにRequest.Cookies["。SSOAUTH"]を試しましたか。また、.countを調べて、受信したCookieの数を確認します。

于 2012-05-21T17:56:29.587 に答える