Mic*_*ael 7 cookies redirect http referer
我有一个实现 OpenID Connect 客户端的 HTTP 服务器。OpenID Connect 协议涉及许多重定向,其中之一给我带来了麻烦,可能是由于 Referer 标头的存在。Firefox、Chrome 和 IE 都会出现此问题。
我创建了一个简单的 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
Run Code Online (Sandbox Code Playgroud)
浏览器返回:
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
Run Code Online (Sandbox Code Playgroud)
看起来不错,我们的请求得到了满足。返回所请求的资源,状态为 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
Run Code Online (Sandbox Code Playgroud)
浏览器返回:
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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,浏览器通过发送不带 cookie 的下一个请求来响应重定向。由于没有 cookie,我的服务器将浏览器重定向到 OpenID Provider 进行身份验证,从而开始无限循环。
我看到的唯一区别是,在使用 salesforce.com 进行测试时,最终请求包含一个 Referer。我怀疑这可能导致它不包含 cookie。是这样吗?如果是这样,请告诉我我能做些什么。显然,我无法控制 salesforce.com 的行为。
事实证明,Referer 并不是罪魁祸首。我发现您可以在 Firefox 中禁用 Referer 标头。我这样做了,但仍然得到相同的结果。从 salesforce.com 返回后重定向时,浏览器不支持 Set-Cookie 标头。也就是说,它仍然没有在原始帖子的步骤 4 中发送 cookie。
所以,问题还没有解决,但是这个问题已经有了答案。
| 归档时间: |
|
| 查看次数: |
2660 次 |
| 最近记录: |