Вход на основе токена сервера авторизации Spring вместо входа в форму
Я пытаюсь реализовать сервер авторизации OAuth2, используя Spring Boot 3 (Spring Authorization Sever)
Когда клиент пытается получить код авторизации с сервера, он перенаправляется на форму входа. Но я хочу, чтобы сервер вместо этого выбирал токен из файлов cookie и проверял его на внешней системе, а в случае успеха отправлял обратно код авторизации.
Я попытался удалить вход на основе формы, но, поскольку приложение настроено на требование аутентификации для каждого запроса к серверу, я получал сообщение «Запрещено», и это правильно. Но вместо того, чтобы сразу отправлять запрещенную ошибку, я хочу, чтобы она проверила токен, полученный в файлах cookie.
У меня настроены эти 2 компонента цепочки фильтров.
@Bean
@Order(1)
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
return http.getConfigurer(OAuth2AuthorizationServerConfigurer.class)
.oidc(Customizer.withDefaults())
.and()
.exceptionHandling(e -> e.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")))
.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt)
.build();
}
@Bean
@Order(2)
public SecurityFilterChain appSecurityFilterChain(HttpSecurity http) throws Exception {
return http.formLogin(Customizer.withDefaults()).authorizeHttpRequests((authorize -> authorize.anyRequest().authenticated())).build();
}
Я тестирую поток кода авторизации для OAuth2 с помощью Postman. Когда я пытаюсь получить токен доступа с помощью почтальона, он отправляет запрос/oauth2/authorize
конечная точка, которая затем перенаправляется на страницу входа. После отправки учетных данных на странице входа токен генерируется успешно.
Я хочу пропустить эту страницу входа и вместо использования этой страницы входа для аутентификации я хочу, чтобы сервер использовал проверку токена для аутентификации. То есть я хочу, чтобы он получил токен (из файлов cookie, заголовков и т. д.) и проверил его, и если токен действителен, то предоставил код авторизации, токен доступа и т. д.
Интересно, как мне поступить? Не нашел много статей на эту тему...