#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, если какое-либо из них выполнено успешно, вы аутентифицированы.. не уверен 🙂