Файлы cookie ответа библиотеки OIDC js не сохраняются и не прикрепляются для последующих запросов

Я использую authcodeflow с PKCE.

Использование библиотеки OIDC js во внешнем интерфейсе, выполнение вызовов adfs, получение кода аутентификации, а затем вызов моего внутреннего api. Бэкэнд API, который вызывает сервер adfs, получает токен доступа, а бэкэнд API возвращает токен в виде файла cookie во внешний интерфейс. Я вижу файл cookie в заголовках ответов. но этот файл cookie не сохраняется в браузере и не добавляется для последующих запросов. Я пробовал использовать тот же сайт со всеми режимами - ›Слабый, Нет, Строгий и без настроек. Это проблема с библиотекой OIDC js или она блокирует файлы cookie для хранения в браузере?

Обновление: ниже представлено наблюдение с моим анализом, поскольку OIdc-client-js не имеет возможности установить флаг withCredentials в значение true для запросов. Файлы cookie не отправляются в запросе, а файлы cookie ответа игнорируются для запросов с перекрестным происхождением. Эти изменения помечены как улучшения и все еще не завершены в репозитории github. https://github.com/IdentityModel/oidc-client-js/issues/1062

Есть ли способ добиться успеха с помощью этой библиотеки? или любые другие библиотеки для OIDC js

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials


person Jaikrishnan    schedule 21.10.2020    source источник


Ответы (1)


Итак, вы отправляете cookie из домена API, который является родственником WEB-домена:

  • web.mycompany.com
  • api.mycompany.com
  • Домен cookie = .mycompany.com

ВОЗМОЖНЫЕ ПРИЧИНЫ ОТКЛЮЧЕНИЯ COOKIE

Может быть, это флаг withCredentials или, может быть, из-за отсутствия пользовательского жеста, поскольку пользователь не сделал ничего явного для перехода на api.mycompany.com, например, навигации браузера или щелчка по ссылке?

ПРИНУЖДЕНИЕ ОТЧЕТОВ

Вы можете переопределить прототип таким образом, чтобы добавить свойство withCredentials. Это немного взломано, но вы можете ограничить использование на основе URL-адреса, и он должен сообщить вам, решает ли настройка withCredentials вашу проблему:

let open = XMLHttpRequest.prototype.open;  
XMLHttpRequest.prototype.open = function(method, url) {  
    open.apply(this, arguments);
    this.withCredentials = true;
}  

ПРИ ПРОКСИРОВАНИИ ЧЕРЕЗ ВЕБ-ДОМЕН БУДЕТ МЕНЬШЕ ПРОБЛЕМ С COOKIE

В моем сообщении в блоге я кое-что делаю аналогично сообщениям прокси, содержащим токен обновления. Однако я использую точный веб-домен, а не поддомен API. На это никогда не повлияют ограничения браузера.

person Gary Archer    schedule 22.10.2020
comment
Да, например, мой интерфейс - web.example.com, а api - api.example.com. В этом случае оба находятся в одном домене. Да, это разные поддомены, но когда я помечу свой домен как .example.com, он должен работать. Я пробовал, и он работает, как ожидалось. единственная проблема - когда вызовы выполняются из oidc-client-js. Поскольку библиотека не помечает запросы с помощью withCredentials = true. в противном случае браузер игнорирует ответные файлы cookie и не отправляет файлы cookie для запроса. - person Jaikrishnan; 27.10.2020
comment
Хорошо - обновил свой ответ обходным путем, который вы могли бы использовать - интересно узнать, решит ли это вашу проблему .. - person Gary Archer; 28.10.2020
comment
да. Это работает. Большое спасибо за уделенное время. Но хочу знать только одно: это хорошая практика и не вызывает ли производительность или другие проблемы? - person Jaikrishnan; 29.10.2020
comment
Это крайняя возможность разблокировать себя - надеюсь, в какой-то момент авторы библиотеки предоставят точку расширения, например, позволят вам переопределить клиентский класс OIDC Token - затем вы можете удалить взлом. - person Gary Archer; 29.10.2020