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

6
我有一个实现OpenID Connect客户端的HTTP服务器。OpenID Connect协议涉及多个重定向,其中一个可能由于Referer头的存在而导致问题。问题出现在Firefox、Chrome和IE中。
  1. 请求发送到我的服务器,浏览器被重定向到OpenID提供程序。
  2. OpenID提供程序对终端用户进行身份验证并将浏览器重定向到我的服务器上的一个端点。
  3. 我的服务器与OpenID提供程序交互以确定终端用户的身份并为用户建立会话。
  4. 浏览器被重定向回我的服务器,以使用cookie中的会话ID重新执行原始请求。
我创建了一个简单的OpenID Connect提供程序实现进行测试,一切正常。但是当与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提供者进行身份验证,从而开始了无休止的循环。
唯一我能看到的区别是,在与salesforce.com测试时,最后一个请求包含一个"Referer"(引荐)。我怀疑这可能导致它不包括cookie。如果是这样的话,您有什么解决方法吗?显然,我无法控制salesforce.com做些什么。
2个回答

3

将cookie的SameSite属性从“strict”更改为“lax”


3
事实证明,Referer并不是罪魁祸首。我发现你可以在Firefox中禁用Referer头。我这样做了,但仍然得到相同的结果。当从salesforce.com返回后重定向时,浏览器不会遵守Set-Cookie头。也就是说,在原始帖子的第4步中仍未发送cookie。

因此,问题尚未解决,但这个问题已经得到了回答。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接