Настройки атрибута Micronaut JWT игнорируются

У меня есть веб-приложение на основе Micronaut, и у меня возникли проблемы со стороны аутентификации. Проблема конкретно связана с изменениями, происходящими в браузерах, в которых SameSite по умолчанию использует Lax, а если вы используете SameSite: none, то файл cookie должен быть безопасным. Я использую все последние стабильные версии, например Микронавт 2.0.1.

Chrome дает мне следующее исключение:

Файл cookie, связанный с межсайтовым ресурсом по адресу http://xxxxxx.herokuapp.com/, был установлен без атрибут SameSite. Он был заблокирован, так как Chrome теперь доставляет файлы cookie с межсайтовыми запросами, только если они установлены с SameSite=None и Secure. Вы можете просмотреть файлы cookie в инструментах разработчика в разделе Приложение ›Хранилище› Файлы cookie и просмотреть дополнительные сведения на странице https://www.chromestatus.com/feature/5088147346030592 и https://www.chromestatus.com/feature/5633521622188032.

Единственное, что сбивает с толку, это то, что он упоминает http, а не https, хотя все URL-адреса https, когда я смотрю сетевую активность. В частности, он жалуется на два запроса, и оба URL-адреса запрашивающего являются https.

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

Set-Cookie: JWT = eyJhbGciOiJub2 ... U5ODYxNzA2MX0 .; Максимальный возраст = 3600; Срок действия истекает = Fri, 28 Aug 2020 13:17:41 GMT; Путь = /; HTTPOnly

Файл cookie не является безопасным и не указан SameSite (поэтому по умолчанию используется Lax). Я требую, чтобы он был одновременно и SameSite: None, и безопасным.

У меня безопасность Micronaut настроена по-разному в разных средах, потому что мы используем OpenId (Azure AD) в нашей производственной среде и просто используем внутреннюю аутентификацию в наших тестовых средах. Кажется, у нас есть одна и та же игнорируемая проблема конфигурации в обеих средах. Вот два YML:

  application:
    name: xxxxx
  security:
    authentication: idtoken
    oauth2:
      enabled: true
      clients:
        azure:
          client-id: ${OAUTH_CLIENT_ID}
          client-secret: ${OAUTH_CLIENT_SECRET}
          openid:
            issuer: https://login.microsoftonline.com/xxx
      callback-uri: ${OAUTH_CALLBACK_URI}
    redirect:
      login-success: ${LOGIN_SUCCESS_URL}
      logout: '/logout-handler/logout-success'
    endpoints:
      logout:
        get-allowed: true
    token:
      jwt:
        cookie:
          cookie-same-site: none
          cookie-secure: true

а также

  application:
    name: xxxxx
  security:
    authentication: cookie
    oauth2:
      enabled: false
      clients:
        azure:
          client-id: ${OAUTH_CLIENT_ID}
          client-secret: ${OAUTH_CLIENT_SECRET}
          openid:
            issuer: https://login.microsoftonline.com/xxx
      callback-uri: ${OAUTH_CALLBACK_URI}
    redirect:
      login-success: ${LOGIN_SUCCESS_URL}
      logout: '/logout-handler/logout-success'
    endpoints:
      logout:
        get-allowed: true
    token:
      jwt:
        cookie:
          cookie-same-site: none
          cookie-secure: true

Как видите, я пытаюсь установить для cookie-same-site значение none, а для cookie-secure - значение true для обоих. Кажется, это не работает. В этом отношении, согласно документам, для cookie-secure по умолчанию должно быть установлено значение true, поэтому я еще больше смущен тем, почему это не работает.

Я предполагаю, что проблема заключается либо в (1) в том, что я неправильно понял в конфигурации, либо в (2) ошибке в Micronaut. Если бы кто-нибудь мог посоветовать, было бы здорово.


person brent777    schedule 28.08.2020    source источник


Ответы (1)


Немного поздно, но значение должно быть cookie-same-site: 'None'

person Holophrasis    schedule 08.04.2021