Как реализовать JWT с Keycloak в архитектуре микросервиса загрузки Spring?

Я прочитал несколько статей о реализации Spring Keycloak (например: easy-secure-your-spring-boot-applications-with-keycloak), но никто не упоминает, как использовать с JWT.

Я создал шлюз zuul api и добавил адаптер Keycloak, как описано в ранее связанной статье. Это нормально, но я хочу использовать JWT с клавиатурой.

Упомянутое в другом месте, установите тип доступа клиента как носитель, а стратегию сеанса - NullAuthenticatedSessionStrategy. Хватит или нужно что-то еще для JWT?

Итак, мои вопросы:

  • Как мне настроить клиента на администраторе Keycloak для JWT?
  • Как настроить Keycloak в файле конфигурации серверной части для JWT?
  • Как настроить адаптер Keycloak для JWT?
  • Как передать информацию о пользователе в микросервис? Создать фильтр в шлюзе? Но как мне получить информацию о пользователе из запроса?

person ZeroProcess    schedule 21.02.2019    source источник


Ответы (1)


Маркер доступа Keycloak - это JWT. Это JSON, и каждое поле в этом JSON называется claim. По умолчанию вход в систему username возвращается в claim с именем “preferred_username” в access token. Сервер ресурсов Spring Security OAuth2 ожидает имя пользователя в claim с именем “user_name”. Итак, вам нужно создать сопоставитель, чтобы сопоставить зарегистрированный username с новым claim с именем user_name.

Чтобы предоставить доступ к клиенту (микрослужба), соответствующий role должен быть назначен / сопоставлен с user.

В приложении весенней загрузки вам необходимо настроить подключение к серверу keycloak, указав auth url, token url, scope, grant-type, client-id и client-secret.

После этого ваше приложение сможет анализировать токен JWT, вам нужно создать JwtAccessTokenCustomizer. Этот класс должен расширять DefaultAccessTokenConverter и реализовывать JwtAccessTokenConverterConfigurer классы. Основная логика лежит в public OAuth2Authentication extractAuthentication(Map<String, ?> tokenMap) методе.

Затем вам нужно настроить OAuth2 Resource Server для предоставления доступа другим микросервисам. Для этого вы определяете здесь - Oauth2RestTemplate Bean.

И, наконец, защитите свой REST API с помощью стандартной конфигурации Component.

Итак, вы видите, что это большая работа, и ее нельзя описать кодом, показать часть своей работы, разделить ее на части и задать интересующие вас вопросы.

person BSeitkazin    schedule 21.02.2019