Реализация OAuth с Api-шлюзом в неявном типе предоставления с использованием Spring Cloud (без сохранения состояния) - PullRequest
1 голос
/ 12 апреля 2020

У нас есть шлюз Api перед поставщиком аутентификации и микросервисами (серверы ресурсов). В этой архитектуре нам не нужно получать JWT по типу гранта authorization_code и запускать два вызова, поскольку у нас нет внешних клиентов oauth, и только клиент является шлюзом.

Существует пример приложения , реализованный Джо Грандджа для реализации oauth с облачной пружиной и Api-Gateway. Это потрясающе, но оно работает на основе веб-сессии и authorization_code grant-type.

Что это значит, паттерн с состоянием, между браузером и шлюзом у нас есть JSESSIONID и активный сеанс на стороне сервера в шлюз и использование сеанса между шлюзом и провайдером аутентификации (UAA) для хранения Authorization Request для получения кода и затем токена.

Я не знаю, какой смысл здесь иметь активные сеансы и использовать authorization_code, когда и auth_provider, и его клиент (шлюз) находятся в одном домене.

Дизайн, которым я являюсь мышление, основано на полностью безгосударственном образце. Браузер или мобильные приложения должны отправлять токен для каждого запроса в шапке. Мы избавляемся от аутентификации на основе cook ie, и CSRF может быть отключен, и ... также шлюзу не нужно выделять память для объектов сеанса. Мы можем иметь несколько экземпляров Auth-провайдера с одним шлюзом и т. Д. И т. Д. c.

Не должно быть никаких проблем для реализации этого с нуля, но мне интересно, поддерживает ли Spring OAuth2 неявный тип предоставления когда мы используем:

NoOpServerSecurityContextRepository.getInstance()

По умолчанию SecurityContextRepository в Spring равен WebSessionServerSecurityContextRepository, а в примере приложения, о котором я упоминал выше, когда я изменил его на NoOpServerSecurityContextRepository, я получаю исключение, потому что тип предоставления 'authorization_code' и spring должны хранить запрос в сеансе.

Итак, я ищу весной для реализации неявного типа предоставления.

Спасибо,

...