Почему Cookie не отправляется в конечную точку API только на хост-компьютере API? - PullRequest
0 голосов
/ 28 мая 2019

Мой API имеет конечную точку аутентификации A, которая должна возвращать куки аутентификации.Конечная точка B требует cookie аутентификации.После посещения конечной точки A и моя машина разработки, и отдельный тестовый клиентский компьютер всегда успешно проходят проверку подлинности при посещении конечной точки B (на работающей виртуальной машине локальный хост не задействован) в Chrome.Я вижу заголовок cookie в этих запросах к конечной точке B.

Между тем, при посещении живой конечной точки B с самой виртуальной машины, аутентификация выглядит успешной, но Chrome перенаправляется при попыткепосещение конечной точки B. Ведение журнала означает, что файл cookie авторизации не отправляется в запросе к конечной точке B.

И моя машина разработчика, и виртуальная машина получают заголовок set-cookie в ответ при использовании Postman(Я должен отключить проверку SSL на обеих машинах, чтобы это работало).

Файл cookie выглядит следующим образом, хотя я пробовал его без политики домена, безопасности и политики на том же сайте (постепенно):

cName=cValue; expires=Tue, 11 Jun 2019 02:21:06 GMT; domain=.mydomain.net; path=/; secure; samesite=lax

Вопрос: Чтоможет помешать Chrome на ВМ отправлять куки?Я попытался настроить атрибуты cookie в случае, если это была проблема.

Context :

  • версия ядра asp.net: 2.2
  • Cookie.httpOnly: false
  • Cookie.SameSite: я пробовал None и Lax, потому что cookie запрашивается из расширения Chrome.
  • Cookie.Secure: я пробовал true и false.
  • Cookie.Domain: я пробовал несколько значений и не устанавливал их.
  • Используется CORS и широко открыт.
  • У меня установлен доверенный сертификат SSL для сайта.

1 Ответ

0 голосов
/ 11 июня 2019

Мне нужно было изучить некоторые вещи CORS для достижения моей цели. Я нашел очень полезную статью msdn . Короче говоря, следующие изменения клиента и сервера потребовались для того, чтобы удовлетворить браузер и принять запросы по мере необходимости на сервере.

Это стало причиной моей непосредственной проблемы:

  • XMLHttpRequest.withCredentials должен был иметь значение true на стороне клиента, чтобы не игнорировать файл cookie аутентификации в ответе (параграф 2) .
  • CorsPolicyBuilder.AllowCredentials () должен был быть вызван в Configure () в Startup.cs для получения этого запроса withCredentials.

Что странно, так это то, что без этого он работает везде, кроме хост-сервера, и я до сих пор не могу этого объяснить.

Другие неприятные детали, которые мне нужно было исправить, которые могли бы затуманить проблему:

  • Домен Cookie должен быть установлен соответствующим образом для варианта использования
  • Атрибут Cookie для SameSite должен быть Lax
  • UseCors ()
  • CorsPolicyBuilder.WithOrigins (новая строка [] {"domain-a", "domain-b"})
...