В текущем проекте у нас есть пользовательский сервер аутентификации, который, как правило, реализует стандартную загрузку стандартного сервера аутентификации.
Теперь мы хотим создать общую библиотеку, которая будет иметь клиентский код 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 с кодом авторизации и токенами доступа? Или я должен просто написать свой код, чтобы сам получить токены доступа?