Сначала я импортировал предложенную ими область с именем Quickstart написано здесь. Затем я реализовал и опробовал их код, чтобы посмотреть, смогу ли я действительно успешно использовать его для аутентификации. Все мои коды приведены ниже:
policy-enforcer.json
Код: Выделить всё
{
"realm": "quickstart",
"auth-server-url": "http://10.8.133.206:8080",
"resource": "authz-servlet",
"credentials": {
"secret": "secret"
}
}
Код: Выделить всё
spring.security.oauth2.resourceserver.jwt.jwk-set-uri=http://external-ip-address/realms/quickstart/protocol/openid-connect/certs
Код: Выделить всё
@Configuration
@EnableWebSecurity
public class KeycloakSecurityConfiguration {
@Value("${spring.security.oauth2.resourceserver.jwt.jwk-set-uri}")
String jwkSetUri;
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(auth -> auth
.anyRequest().authenticated())
.oauth2ResourceServer(configurer -> configurer.jwt(Customizer.withDefaults()))
.addFilterAfter(createPolicyEnforcerFilter(), BearerTokenAuthenticationFilter.class);
http.sessionManagement(
t -> t.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
return http.build();
}
private ServletPolicyEnforcerFilter createPolicyEnforcerFilter() {
PolicyEnforcerConfig config;
try {
config = JsonSerialization.readValue(getClass()
.getResourceAsStream("/policy-enforcer.json"), PolicyEnforcerConfig.class);
}
catch (IOException e) {
throw new RuntimeException(e);
}
return new ServletPolicyEnforcerFilter(request -> config);
}
@Bean
JwtDecoder jwtDecoder() {
return NimbusJwtDecoder.withJwkSetUri(this.jwkSetUri).build();
}
}
Код: Выделить всё
@RestController
public class OAuth2ResourceServerController {
@GetMapping("/")
public String index(@AuthenticationPrincipal Jwt jwt) {
return String.format("Hello, %s!", jwt.getClaimAsString("preferred_username"));
}
@GetMapping("/protected/premium")
public String premium(@AuthenticationPrincipal Jwt jwt) {
return String.format("Hello, %s!", jwt.getClaimAsString("preferred_username"));
}
}
После того, как я получил эту ошибку, я искал множество различных предлагаемых подходов, таких как использование типа авторизации OAuth2.0 в Postman или изменение настроек appspetting.json, но ничего не решило мою проблему.
Я чувствую, что меня не хватает что-то, но я не смог найти, что это такое, поэтому я здесь.
Подробнее здесь: https://stackoverflow.com/questions/784 ... ing-boot-3