OWIN安全AuthenticationHandler中出现多个cookie

时间:2014-07-22 03:52:44

标签: owin facebook-authentication katana asp.net-identity-2 owin-security

我正在使用Facebook Owin身份验证,并且或多或少都遵循Microsoft示例。我或多或少跟随第一次用户登录,一切正常。但是如果他们退出并重试,看起来好像之前的.AspNet.Correlation.Facebook没有删除,而是设置为空字符串。所以我下一次打电话给api / getexternallogin在Fiddler看来是这样的:

enter image description here

这是我们生成correlationId的时候,此时有多个cookie不是显示阻止。在响应中,我将其设置为新的CorrelationId:

enter image description here

稍后当facebook回拨“/ signin-facebook”时,我们尝试验证ValidateCorrelationId方法中的correlationId。请求似乎是这样的:

enter image description here

所以新的CorrelationId已设置但是没有值的额外cookie意味着当我去Request.Cookies [“ValidateCorrelationId”]时,它返回空字符串。

我检查了代码,似乎修改此cookie的唯一方法是GenerateCorrelationId和ValidateCorrelationId。这些方法的实现可以在这里找到:

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

奇怪的是,我的浏览器似乎没有看到问题:

enter image description here

非常感谢任何想法。

1 个答案:

答案 0 :(得分:2)

好的,这让我感到非常沮丧,但是当在ValidateCorrelationId方法中调用Response.Cookies.Delete(" .AspNet.Correlation.Facebook")时,它会发送以下内容作为回应:

enter image description here

因此"的价值到期"已被连接并被视为两个独立的" set-cookie" s。因此,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中的一个真正的错误。