3

私は Facebook Owin 認証を使用しており、多かれ少なかれ Microsoft のサンプルに従っています。初めてのユーザーのログインに多かれ少なかれ従っていますが、すべて問題ありません。しかし、サインアウトして再試行すると、以前の .AspNet.Correlation.Facebook が削除されていないように見えますが、空の文字列に設定されています。したがって、次の api/getexternallogin への呼び出しは、Fiddler では次のようになります。

ここに画像の説明を入力

これは、correlationId を生成しているときであり、この時点で複数の Cookie を持っていてもショー ストッパーではありません。応答で、新しい CorrelationId に設定しました。

ここに画像の説明を入力

後で facebook が "/signin-facebook" にコールバックすると、ValidateCorrelationId メソッドでcorrelationId を検証しようとします。リクエストは次のようになります。

ここに画像の説明を入力

したがって、新しい CorrelationId が設定されましたが、値のない余分な Cookie は、Request.Cookies["ValidateCorrelationId"] に移動すると空の文字列を返すことを意味します。

コードを確認したところ、この Cookie を変更するメソッドは GenerateCorrelationId と ValidateCorrelationId だけのようです。これらのメソッドの実装は、次の場所にあります。

http://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Security/Infrastructure/AuthenticationHandler.cs

不思議なことに、私のブラウザは問題を認識していないようです:

ここに画像の説明を入力

どんなアイデアでも大歓迎です。

4

1 に答える 1

3

OK、これにはかなりの不満がありましたが、ValidateCorrelationId メソッドで Response.Cookies.Delete(".AspNet.Correlation.Facebook") が呼び出されると、次の応答が送信されます。

ここに画像の説明を入力

したがって、「expires」の値は連結され、2 つの別個の「set-cookie」として扱われます。したがって、Cookie は期限切れではありませんが、その値は空の文字列に設定されます。「Thu」の後のカンマが原因のようです。

私が思いついた修正は、 Response.Cookies.Delete(".AspNet.Correlation.Facebook") をコメントアウトし、代わりに次のことを行うことでした:

Response.Headers.Add("Set-Cookie", new[] { CorrelationKey + "=; path=/; expires=Fri 02-Jan-1970 00:00:00 GMT" })

カンマはなく、現在動作しています。

これは、OWIN の本物のバグのようです。

于 2014-07-22T06:27:08.180 に答える