Я программирую клиент (приложение Spring Boot), который должен предоставить пользователю две конечные точки: одну, которая использует предоставление кода авторизации, а другую, которая использует предоставление учетных данных пароля владельца ресурса. Конечные точки находятся на разных URL. Другой будет использоваться внутренним приложением, поэтому я не беспокоюсь о безопасности.
У меня есть внешний сервер OAuth2 (сервер авторизации и ресурсов) - поэтому я не программирую их, но у меня полный доступ к их конфигурации. Keycloak под вопросом.
Мне удалось настроить предоставление кода авторизации, но я не могу заставить работать другой.
Мой application.yml выглядит примерно так:
security:
oauth2:
resource:
token-info-uri: ...3rd party...
userInfoUri: ...3rd party...
client:
client-id: ...
client-secret: ...
grant-type: authorization_code
registered-redirect-uri: http://localhost:8080/app/auth_grant
pre-established-redirect-uri: http://localhost:8080/app/auth_grant/
user-authorization-uri: ...3rd party uri...
access-token-uri: ...3rd party uri...
scope:
- read
- write
- openid
У меня есть реализация WebSecurityConfigurerAdapter с аннотацией @EnableOAuth2Sso
@Configuration
, которая разрешает несанкционированный доступ только к / login .
Теперь я хочу, чтобы мои пользователи могли войти с помощью Предоставление учетных данных пароля владельца ресурса в (пример) / login_ROPCG .
Я прочитал документацию, но, думаю, я направился в неправильном направлении. Можете ли вы дать мне несколько советов?
Я читал этот комментарий: Spring Boot Oauth2 использует несколько grant_types для одного и того же URL-адреса В котором намек на то, что мне нужны две разные конфигурации безопасности с разными отображение, но я не знаю, как это сделать.
Я прочитал это: Как я могу реализовать аутентификацию Basi c с аутентификацией JWT в Spring Boot? но я не не вижу, как установить два разных типа грантов.
И из-за этого я не уверен, что это вообще возможно: https://github.com/spring-projects/spring-boot/issues/14554