Cookie未在重定向时发送。 Referer是罪魁祸首吗?

时间:2016-02-04 21:58:02

标签: http redirect cookies referer

我有一台实现OpenID Connect客户端的HTTP服务器。 OpenID Connect协议涉及许多重定向,其中一个给我带来麻烦,可能是由于存在Referer头。 Firefox,Chrome和IE会出现问题。

  1. 请求来到我的服务器。浏览器将重定向到OpenID提供程序。
  2. OpenID Provider对最终用户进行身份验证,并将浏览器重定向到我服务器上的端点。
  3. 我的服务器与OpenID提供商交互以确定最终用户的身份并为用户建立会话。
  4. 浏览器被重定向回我的服务器以重新执行原始请求,这次是在cookie中使用会话ID。
  5. 我已经为测试创建了一个简单的OpenID Connect Provider实现,一切正常。但是在使用salesforce.com进行测试时,步骤4中的最终重定向存在问题。使用salesforce.com时,最终请求不包含Cookie标头。

    使用我的OpenID Connect提供程序进行测试

    在步骤4中发送给用户浏览器的响应:

    HTTP/1.1 302 Found
    Set-Cookie: session=c925f5006beb15cab779b292fe37e727; path=/; secure; HttpOnly
    Location: https://localhost:21201/targetService
    Content-Type: text/html; charset=UTF-8
    Content-Length: 75
    

    浏览器返回:

    GET /targetService HTTP/1.1
    Host: localhost:21201
    Connection: keep-alive
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36
    DNT: 1
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: en-US,en;q=0.8
    Cookie: session=c925f5006beb15cab779b292fe37e727
    

    看起来不错,请求很荣幸。请求的资源以200状态返回。

    使用salesforce.com进行测试

    在步骤4中发送给用户浏览器的响应:

    HTTP/1.1 302 Found
    Set-Cookie: session=5c6980f0ca3a1860b66880c836865eb0; path=/; secure; HttpOnly
    Location: https://localhost:21200/targetService
    Content-Type: text/html; charset=UTF-8
    Content-Length: 75
    

    浏览器返回:

    GET /targetService HTTP/1.1
    Host: localhost:21200
    Connection: keep-alive
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36
    DNT: 1
    Referer: https://na16.salesforce.com/setup/secur/RemoteAccessAuthorizationPage.apexp?source=CAAAAVKuWovcME8wODAwMDAwMDAwMDA0AAAAxrM5iJVLBE88gApP096QhF5f83j0HN8ziJiIAdQEiiPmEiBfkMSrZVdxHPiO0EmDxIeKxZCkfidhCpaB4sEOkTNXsBjtNOE3NuhngS-cU8NPzTGM5aSnS8GiPgfui_7SvRh0y6jfFqYg_WkIh0RDK9u7KQjuz4VsFy5lJ2wBP0tyKSmpKSoXVCSxiwwcRZJbCjZVxWwiwodVVf5YfgAOpJ8fF64-swwZNxzi7-ZpTPPZVBIJtxaO_VKIDbrRH9BnaIoo7FRld4P0pYmlh7SOk4I5YhibW_dc-NqQ8YHj7EXv9EMc0Zk2PFDfP8QJV1LJ_pdu-UzpI-r78JTMQlZeF6OC2ANaMGykEyD9BI7cFNKu6UD1MljaiRCcEuMdqP2n7s0yFmRt1o-wl9gSIY6BHq_0LshPlC_quufFA6qFwLEperjE3LZ78JBYLUTLFAlzM1GeGEh75MADZZqvWQE7DTbrvYcB29Q0tMK2jC22FTp8GqfxgSD5UBirfCWjfLDkDccII2g1AwteoH0tBTwhNUQqA2bb8Tl7aRQ_vIHxRboN9h5WlSpZEqphiq_FJAL1F3bPoicoSCvFDxYzQj-SrlY%3D&display=page
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: en-US,en;q=0.8
    

    如您所见,浏览器通过发送没有cookie的下一个请求来响应重定向。因为没有cookie,我的服务器将浏览器重定向到OpenID Provider进行身份验证,启动无限循环。

    我能看到的唯一区别是,在使用salesforce.com进行测试时,最终请求包括一个Referer。我怀疑这可能导致它不包括cookie。是这样的吗?如果是这样,任何关于我能做些什么的想法。显然,我无法控制salesforce.com的作用。

2 个答案:

答案 0 :(得分:0)

事实证明,Referer 不是罪魁祸首。我发现你可以在Firefox中disable use of the Referer header。我这样做了,但仍然得到了相同的结果。从salesforce.com返回后重定向时,浏览器不支持Set-Cookie标头。也就是说,它仍然没有在原帖的第4步发送cookie。

所以,问题尚未解决,但这个问题已经得到解答。

答案 1 :(得分:0)

将Cookie SameSite从“严格”更改为“宽松”