【问题标题】:Multiple cookies issue in OWIN security AuthenticationHandlerOWIN 安全 AuthenticationHandler 中的多个 cookie 问题
【发布时间】:2014-07-22 03:52:44
【问题描述】:

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

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

稍后当 facebook 回调“/signin-facebook”时,我们尝试在 ValidateCorrelationId 方法中验证相关性 ID。请求看起来像这样:

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

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

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

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

任何想法将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    好的,这让我有点沮丧,但是当在 ValidateCorrelationId 方法中调用 Response.Cookies.Delete(".AspNet.Correlation.Facebook") 时,它会发送以下响应:

    因此,“expires”的值已被连接起来,并被视为两个单独的“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 中的一个真正的错误。

    【讨论】:

    • 我想我可能会遇到类似的情况,您是否在 codeplex 中提交了错误?
    • 嗯,我以为我做到了。我只是看了一下,没找到。但是这里提到的解决方法应该有效。
    • 如果您是 cookie 到期的人,这没关系。如果您使用第三方库(如 IdentityServer)或使用 context.Authentication.SignOut 方法 - 这将不起作用。这是 OWIN/Katana 中一个非常令人沮丧的错误。我不得不求助于编写一个 cookie 清理中间件来重新组合所有 cookie,并考虑到日期名称后的逗号再次拆分它们。
    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2021-03-31
    • 2014-11-26
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    相关资源
    最近更新 更多