asp.net mvc - 認証 - ASP.NETフォームが静的イメージ要求に対して Cookie を設定しているのはなぜですか?




web.config authorization (4)

私は静的コンテンツ(画像)と同じドメインからの動的コンテンツを提供しているASP.NET(MVC)ウェブサイトを持っています。 このサイトはフォーム認証を使用し、ログインコントローラを持っています。 ランダムな間隔で自分自身がログインまたはログアウトしているのを見つけた人々には非常に奇妙な/不規則な問題がありました。認証クッキー これがキャッシュされると、全員が同じ認証Cookieを取得します。これは、非常に奇妙な結果につながります。

私の質問です - 最初に画像はどのようにしてset-cookieヘッダを取得するのでしょうか。 これを引き起こすためにASP.NETフォーム認証モジュールは何をしていますか - 確かにそれはメインのHTMLコンテンツレスポンスにクッキーを設定します。 認証Cookieはその後のドメインへのすべての要求と共に送信されることがわかりますが、最初にCookieがどのように設定されているのかわかりません。

(ところで、この問題は同様の問題に苦しんでいる少なくとも2つの既存の大規模eコマースサイトの原因であり、解決策はないので、解決するのが良いでしょう)。

応答は以下の通りです(フィドラーから)。

HTTP/1.1 200 OK
Cache-Control: public, max-age=86400,max-age=86400
Content-Type: image/png
Last-Modified: Thu, 04 Nov 2010 16:00:52 GMT
Accept-Ranges: bytes
ETag: "0528474397ccb1:0"
Server: Microsoft-IIS/7.5
Set-Cookie: my-auth-cookie=6BC25F1EF71989466A48C0120E7739E; path=/; HttpOnly
Date: Wed, 17 Nov 2010 17:15:08 GMT
Content-Length: 15790

更新日:追加情報 - 私たちはWin2008 R2上でIIS 7.5を使用しています、64ビット、そしてアプリは統合されたpipeline / .net 4を使用しているアプリプールの下で実行されています。

アップデート2:私は問題の解決策を探していません、私たちはすでに1つを持っています。 私はその質問に対する答えを探しています、それがそもそもそれが起こった理由は何ですか? サブドメインやCookieの機能について教えて答えないでください。

更新3:リクエストへの追加:

GET https://www.example.com/sprite.png HTTP/1.1
Host: www.example.com
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: my-auth-cookie=6BC25F1EF71989466A48C0120E7739E;

https://code.i-harness.com


この質問に自分自身で答えて、それ以上の更新を防ぎます。

私が見ていた振る舞いの根本的な原因は静的ファイル(css、images、js)の統合されたパイプライン設定クッキーによるものでした - 詳細についてはコメントスレッドを見てください。

プロダクション/ステージング環境で静的コンテンツを別のホストに移動したときに解決しました。


これは実際には.NETの問題そのものではないと思います。あなたの問題の鍵は実際にはリバースプロキシです。

フォーム認証されたパスから静的コンテンツを提供するとき、あなたの接続に関連したクッキーはそれと共に送信されます。 そのため、ユーザーX、セッション1としてサインインして画像foo.pngを取得した場合、リバースプロキシにはPNGファイルがキャッシュ可能であることを示すヘッダーが表示されていることがわかります。

次回そのファイルが要求されるときには、リバースプロキシは、最後にファイルを取得したときにそのファイルに関連付けられていたcookieとともに、そのファイルに直接サービスを提供しています。

実験として、キャッシュ機能を無効にして問題が解決するかどうかを確認するためにリバースプロキシを設定することをお勧めします。

もしあなたがリバースプロキシがコンテンツのキャッシングをするために必要であるなら - それから私はプロキシがキャッシュされたファイルのためにクッキーを無視するように言われることができるかどうか調べることをお勧めします。


フォーム認証を使用して静的コンテンツを保護できるからです。


私にはIISのバグのように思えます。 何が起こっているのか完全に理解しているかどうかを確認し、結果を投稿するために、私はいくつかのわらじコードを書くつもりです。 IIS 7とIIS 7.5でもテストして、違いがないかどうかを確認します。

1つのリクエストが前のリクエストに関連付けられたクッキーを受け取るべきではないようです(私たちのサイトにはキャッシングプロキシはありません。これは内部ネットワーク上で起こっているので、IISはどこかで行っているのです) )

- わん





reverse-proxy