Cookie не отправляется при перенаправлении. Является ли Referer виновником?

У меня есть HTTP-сервер, который реализует клиентскую часть OpenID Connect. Протокол OpenID Connect включает в себя несколько перенаправлений, и одно из них вызывает у меня проблемы, возможно, из-за наличия заголовка Referer. Проблема возникает с Firefox, Chrome и IE.

  1. Запрос приходит на мой сервер. Браузер перенаправлен к провайдеру OpenID.
  2. Поставщик OpenID аутентифицирует конечного пользователя и перенаправляет браузер на конечную точку на моем сервере.
  3. Мой сервер взаимодействует с поставщиком OpenID, чтобы определить личность конечного пользователя и установить сеанс для пользователя.
  4. Браузер перенаправляется обратно на мой сервер для повторного выполнения исходного запроса, на этот раз с идентификатором сеанса в файле cookie.

Я создал простую реализацию 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 для проверки подлинности, начиная бесконечный цикл.

Единственное отличие, которое я вижу, заключается в том, что в окончательном запросе при тестировании с salesforce.com содержится ссылка на Referer. Я подозреваю, что это может быть причиной того, что он не включает cookie. Это тот случай? Если так, любые идеи о том, что я могу с этим поделать. Очевидно, я не могу контролировать то, что делает salesforce.com.

1 ответ

Измените cookie SameSite со "строгого" на "слабый"

Оказывается, Реферер не виновник. Я обнаружил, что вы можете отключить использование заголовка Referer в Firefox. Я так и сделал и до сих пор получаю тот же результат. При перенаправлении после возврата с salesforce.com браузер не учитывает заголовок Set-Cookie. Таким образом, он все еще не отправляет cookie на шаге 4 исходного сообщения.

Итак, проблема еще не решена, но на этот вопрос ответили.

Другие вопросы по тегам