У нас есть инфраструктура, которая выглядит следующим образом:
Она работает так:
- Конецпользователь заходит на наш сайт
site.example.com
и вводит свое имя пользователя / пароль. - AJAX-запрос отправляется на сервер аутентификации,
auth.example.com
с учетными данными пользователя. - В случае успеха, ответбудет содержать UUID (
someUUID
), который идентифицирует текущего пользователя. - Браузер сохраняет
someUUID
в своем локальном хранилище. - Затем пользователь отправляет запрос на
gw.example.com/some/path
. - Шлюз API проверяет заголовок авторизации запроса и загружает данные пользователя, соответствующие указанному UUID (
someUUID
). Затем шлюз API преобразует данные пользователя в токен JWTи добавляет его в пользовательский заголовок с именем X-Auth
.Маркер JWT выглядит следующим образом:
Header:
{
"typ": "SomeSpecificType",
"alg": "...",
"x5t": "...",
"x5u": "https://x501.example.com/path/to/public-key"
}
Body:
{
"jti": "some jti",
"iss": "some iss",
"ver": "2.0",
"sub": "some sub",
"exp": 1559999999,
"nbf": 1559000000,
"iat": 1559999999,
"usr": "Some.User@gmail.com"
}
- Затем шлюз API удаляет заголовок
Authorization
из запроса. - И, наконец, шлюз API направляет запрос в API.
Теперь на 10-м шаге я хочу проверить токен JWT, который передается в API в заголовке X-Auth
, загрузить пользователя и сделать его доступным для моих контроллеров и т. Д.
Без Spring Security один из способов сделать это - написать собственный фильтр, вручную проверить заголовок X-Auth
и подготовить основной объект пользователя, который можно использовать в контроллерах и т. Д.
Но если я вместо этого хотел использовать Spring Security, как я могу справиться с этим сценарием?Нужно ли использовать функцию Spring Security Pre-Auth ?