Как защитить Spring Boot API, использующий собственный токен JWT, с помощью Spring Security? - PullRequest
0 голосов
/ 30 мая 2019

У нас есть инфраструктура, которая выглядит следующим образом:

Diagram

Она работает так:

  1. Конецпользователь заходит на наш сайт site.example.com и вводит свое имя пользователя / пароль.
  2. AJAX-запрос отправляется на сервер аутентификации, auth.example.com с учетными данными пользователя.
  3. В случае успеха, ответбудет содержать UUID (someUUID), который идентифицирует текущего пользователя.
  4. Браузер сохраняет someUUID в своем локальном хранилище.
  5. Затем пользователь отправляет запрос на gw.example.com/some/path.
  6. Шлюз API проверяет заголовок авторизации запроса и загружает данные пользователя, соответствующие указанному UUID (someUUID).
  7. Затем шлюз 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"
    }
    
  8. Затем шлюз API удаляет заголовок Authorization из запроса.
  9. И, наконец, шлюз API направляет запрос в API.

Теперь на 10-м шаге я хочу проверить токен JWT, который передается в API в заголовке X-Auth, загрузить пользователя и сделать его доступным для моих контроллеров и т. Д.

Без Spring Security один из способов сделать это - написать собственный фильтр, вручную проверить заголовок X-Auth и подготовить основной объект пользователя, который можно использовать в контроллерах и т. Д.

Но если я вместо этого хотел использовать Spring Security, как я могу справиться с этим сценарием?Нужно ли использовать функцию Spring Security Pre-Auth ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...