Несколько типов грантов для одного клиентского приложения с Spring Boot Security

Я программирую клиент (приложение 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.

Я прочитал документацию, но я думаю, что я двигался в неправильном направлении. Можете ли вы дать мне несколько советов?

Я прочитал этот комментарий: Весна Boot Oauth2 использует несколько Grant_types для одного и того же URL, в котором подсказка заключается в том, что мне нужны две разные конфигурации безопасности с разным сопоставлением, но я не знаю, как это сделать.

Я прочитал это: «>Как я могу реализовать обычную аутентификацию с аутентификацией JWT в Spring Boot? но я не вижу, как установить два разных типа гранта.

И из-за этого я не уверен, что это вообще возможно: https://github.com/spring-projects/spring-boot/issues/14554


person Hrca12    schedule 06.03.2020    source источник
comment
@dur да, я использую Spring Security 5.2.0. Я хочу сделать это, потому что у нас есть какое-то старое приложение, которое использует старый API, который отправляет имя пользователя и пароль для аутентификации. Что соответствует варианту использования в RFC (tools.ietf.org/html/rfc6749#section -4.3) Этот тип гранта подходит для клиентов, способных получить учетные данные владельца ресурса (имя пользователя и пароль, обычно с использованием интерактивной формы). Он также используется для переноса существующих клиентов, использующих схемы прямой аутентификации, такие как HTTP Basic или Digest, на OAuth путем преобразования сохраненных учетных данных в маркер доступа.   -  person Hrca12    schedule 06.03.2020
comment
До сих пор нет прогресса. У меня проблема с предоставлением пароля при весенней загрузке. Я не могу переопределить WebSecurityConfigurationAdapter, потому что преобразователь по умолчанию, установленный .oauth2Login в методе конфигурации, не знает, как разрешать предоставление пароля.   -  person Hrca12    schedule 10.03.2020