Программисты JAVA общаются здесь
Anonymous
Spring Security, когда я сообщаю Bearer, я получаю 403 Forbidden
Сообщение
Anonymous » 13 окт 2024, 09:19
У меня есть досадная проблема и я не могу ее решить, занимаюсь этим около 2 дней, реализую аутентификацию OAuth2 с помощью Spring Security, удалось реализовать генерацию непрозрачных токенов, но я могу не использую его в запросах, в качестве возврата получаю HTTP-статус 403 ЗАПРЕЩЕНО.
Это мой класс AuthorizationServerConfig:
Код: Выделить всё
@Configuration
public class AuthorizationServerConfig {
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public SecurityFilterChain authFilterChain(HttpSecurity http) throws Exception {
OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
return http.build();
}
@Bean
public AuthorizationServerSettings authorizationServerSettings(SalesSecurityProperties properties) {
return AuthorizationServerSettings.builder()
.issuer(properties.getProviderUrl())
.build();
}
@Bean
public RegisteredClientRepository registeredClientRepository() {
RegisteredClient saleBackend = RegisteredClient
.withId("1")
.clientId("sale-backend")
.clientSecret(passwordEncoder().encode("123"))
.clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
.authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
.scope("READ")
.tokenSettings(TokenSettings.builder()
.accessTokenFormat(OAuth2TokenFormat.REFERENCE)
.accessTokenTimeToLive(Duration.ofMinutes(30))
.build())
.build();
return new InMemoryRegisteredClientRepository(Collections.singletonList(saleBackend));
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
Это мой класс ResourceServerConfig:
Код: Выделить всё
@Configuration
@EnableMethodSecurity(securedEnabled = true)
@EnableWebSecurity
public class ResourceServerConfig {
@Bean
public SecurityFilterChain resourceServerFilterChain(HttpSecurity http) throws Exception {
http
.cors(AbstractHttpConfigurer::disable)
.authorizeHttpRequests((authz) -> authz
.requestMatchers("/oauth2/**").authenticated())
.csrf(AbstractHttpConfigurer::disable)
.oauth2ResourceServer((oauth2) -> oauth2
.opaqueToken(Customizer.withDefaults())
);
return http.build();
}
}
Когда я запрашиваю токен, я получаю его нормально.
И когда я передаю сгенерированный токен, я получаю код 403
Сервер понял токен, но отклонил запрос.
Подробнее здесь:
https://stackoverflow.com/questions/790 ... -forbidden
1728800381
Anonymous
У меня есть досадная проблема и я не могу ее решить, занимаюсь этим около 2 дней, реализую аутентификацию OAuth2 с помощью Spring Security, удалось реализовать генерацию непрозрачных токенов, но я могу не использую его в запросах, в качестве возврата получаю HTTP-статус 403 ЗАПРЕЩЕНО. [b]Это мой класс AuthorizationServerConfig:[/b] [code]@Configuration public class AuthorizationServerConfig { @Bean @Order(Ordered.HIGHEST_PRECEDENCE) public SecurityFilterChain authFilterChain(HttpSecurity http) throws Exception { OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http); return http.build(); } @Bean public AuthorizationServerSettings authorizationServerSettings(SalesSecurityProperties properties) { return AuthorizationServerSettings.builder() .issuer(properties.getProviderUrl()) .build(); } @Bean public RegisteredClientRepository registeredClientRepository() { RegisteredClient saleBackend = RegisteredClient .withId("1") .clientId("sale-backend") .clientSecret(passwordEncoder().encode("123")) .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC) .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS) .scope("READ") .tokenSettings(TokenSettings.builder() .accessTokenFormat(OAuth2TokenFormat.REFERENCE) .accessTokenTimeToLive(Duration.ofMinutes(30)) .build()) .build(); return new InMemoryRegisteredClientRepository(Collections.singletonList(saleBackend)); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } [/code] [b]Это мой класс ResourceServerConfig:[/b] [code]@Configuration @EnableMethodSecurity(securedEnabled = true) @EnableWebSecurity public class ResourceServerConfig { @Bean public SecurityFilterChain resourceServerFilterChain(HttpSecurity http) throws Exception { http .cors(AbstractHttpConfigurer::disable) .authorizeHttpRequests((authz) -> authz .requestMatchers("/oauth2/**").authenticated()) .csrf(AbstractHttpConfigurer::disable) .oauth2ResourceServer((oauth2) -> oauth2 .opaqueToken(Customizer.withDefaults()) ); return http.build(); } } [/code] [b]Когда я запрашиваю токен, я получаю его нормально.[/b] [img]https://i.sstatic.net/xFZTQnui.png[/img] [b]И когда я передаю сгенерированный токен, я получаю код 403[/b] [img]https://i.sstatic.net/tCOJgk9y.png[/img] Сервер понял токен, но отклонил запрос. Подробнее здесь: [url]https://stackoverflow.com/questions/79082521/spring-security-when-i-inform-bearer-i-get-403-forbidden[/url]