Используйте Keycloak в качестве многопользовательского поставщика для проверки токена

#oauth-2.0 #keycloak

#oauth-2.0 #keycloak

Вопрос:

Я бы хотел иметь 2 поставщика удостоверений, например:

Keycloak будет моим основным провайдером (некоторые пользователи будут здесь)

Внешний провайдер будет моим вторым провайдером (я получу токен-носитель напрямую)

В будущем у меня могло бы быть больше внешних провайдеров.

Итак, идея заключается в:

Сервер ресурсов (Spring Security 5 resource-server) получит токен-носитель, иногда это токен Keycloak, иногда это внешний токен.

Возможно ли делегировать каждый токен Keycloak, который он обнаружит, который является поставщиком, и проверяет их на соответствие?

 Bearer Token from Keycloak: 1234
Bearer Token from external provider: 5678

Client (sends Bearer 1234) -> Resource Server (Spring Boot MS) -> Keycloak -> Valid Token

Client (sends Bearer 5678) -> Resource Server (Spring Boot MS) -> Keycloak -> Valid Token in External Provider
 

Заранее благодарю

Комментарии:

1. Один из вариантов — добавить несколько поставщиков удостоверений в сам keycloak, чтобы им можно было управлять автоматически (например, ldap для внутреннего, социальные сети для внешнего). Еще одна вещь: просто добавьте фильтр безопасности в свое приложение spring boot, расширяйте из OncePerRequestFilter, получайте заголовок из запроса, сверяйтесь с основным поставщиком keycloak, нет, сверяйтесь с другим, если нет, 401. Фильтр переходит в конфигурацию безопасности, http.addFilterBefore(yourFilterNameInjected, UsernamePasswordAuthenticationFilter.class ). Все запросы аутентифицируются http.anyRequest().authenticated(). Вы можете это сделать, если вы поняли, что я сказал 🙂

2. @DmitriAlgazin Привет, но возможно ли, например, я отправляю токен с внешнего аутентификации на свой keycloak, и он обнаруживает, является ли токен с моего сервера аутентификации или внешнего сервера аутентификации?

3. Попробуйте выполнить функцию через keycloak, если исключение, попробуйте другое, если снова исключение, верните 401, если какое-либо из них выполнено успешно, вы аутентифицированы.. не уверен 🙂