Spring Boot Oauth2 подключается к стандартному серверу авторизации, но не может заставить Spring получить токены доступа - PullRequest
0 голосов
/ 23 марта 2020

В текущем проекте у нас есть пользовательский сервер аутентификации, который, как правило, реализует стандартную загрузку стандартного сервера аутентификации.

Теперь мы хотим создать общую библиотеку, которая будет иметь клиентский код oauth2 - эта библиотека будет используется в N микро-сервисах, которые будут настраивать только некоторую базовую c информацию (идентификатор клиента, секрет и т. д. c).

Поток должен go через полный цикл oauth2 - так что аутентифицируйте и авторизуйте пользователь, обменяйте код авторизации с сервером авторизации, а затем получите токены доступа, проверьте текущий сеанс и т. д. c.

Проблема, с которой мы столкнулись, заключается в том, что после попытки настроить провайдера по умолчанию с защитой Spring, он получает код авторизации и все - нам нужно написать собственный код для получения токенов доступа.

У нас сложилось впечатление, что Spring Boot Security уже смог go пройти через весь поток - и мы не не знаю, что нам все еще не хватает в конфигурации, чтобы заставить его получить получить доступ к токенам самостоятельно без написания кода извлечения.

Конфигурация безопасности Spring в yaml выглядит следующим образом:

spring:
    security:
        oauth2:
            client:
                access-token-validity-seconds: 30
                provider:
                    custom-provider:
                        authorization-uri: https://the-auth-server-adress.com/oauth/authorize
                        token-uri: https://the-auth-server-adress.com/oauth/token
                        user-info-uri: https://the-auth-server-adress.com/auth/users/{uuid}
                        user-name-attribute: name
                registration:
                    custom-client:
                        authorization-grant-type: authorization_code
                        client-authentication-method: basic
                        client-id: client-id-set-by-ms
                        client-name: Some Name
                        client-secret: client-secret-set-by-ms
                        provider: custom-provider
                        redirect-uri-template: http://localhost:8080/end-of-auth-endpoint
                        scope: appropriate-scope-set-by-ms

Тогда у нас есть класс конфигурации

@Configuration
public class OurConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {

        http.antMatcher("/**").authorizeRequests()
                .antMatchers("/", "/end-of-auth-endpoint**").permitAll()
                .anyRequest().authenticated()
                .and()
                .oauth2Login();
    }
}

И в микросервисе у нас нет специального кода (или аннотаций), просто добавляющего зависимость.

При попытке go к какой-либо произвольной конечной точке клиентское приложение перенаправляет на сервер авторизации и т. д. c. и, как и раньше, поток завершается перенаправлением сервера проверки подлинности на конечную точку «end-of-auth-endpoint», но с кодом аутентификации, присоединенным к URL-адресу, в то время как мы подозреваем, что конечным результатом будет поток, заканчивающийся на «end-of» -auth-endpoint ", но с токенами доступа, уже полученными в сеансе.

Большинство найденных мною учебных пособий показывали:

  • Вот как вы кодируете сервер аутентификации ( но без того, как сделать клиента)

  • Вот как вы кодируете клиента, который подключается к github / google / facebook

Как мне Сконфигурировать Spring Security в приложении Spring, чтобы оно проходило через весь поток oauth2 с кодом авторизации и токенами доступа? Или я должен просто написать свой код, чтобы сам получить токены доступа?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...