401 Несанкционированная ошибка при использовании Keycloak v24.0.4 в Spring Boot 3JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 401 Несанкционированная ошибка при использовании Keycloak v24.0.4 в Spring Boot 3

Сообщение Anonymous »

Я пытаюсь создать серверное приложение с использованием Spring Boot и хочу реализовать решение Keycloak для аутентификации и авторизации. В своей документации они написали Java-адаптеры Keycloak, но, поскольку они устарели, они предложили использовать другой подход, описанный здесь.
Сначала я импортировал предложенную ими область с именем Quickstart написано здесь. Затем я реализовал и опробовал их код, чтобы посмотреть, смогу ли я действительно успешно использовать его для аутентификации. Все мои коды приведены ниже:
policy-enforcer.json

Код: Выделить всё

{
"realm": "quickstart",
"auth-server-url": "http://10.8.133.206:8080",
"resource": "authz-servlet",
"credentials": {
"secret": "secret"
}
}
application.properties (Я написал настройку ниже только из соображений безопасности, а также потому, что это единственное, что связано с клавиатурой)

Код: Выделить всё

spring.security.oauth2.resourceserver.jwt.jwk-set-uri=http://external-ip-address/realms/quickstart/protocol/openid-connect/certs
KeycloakSecurityConfiguration.java (Только класс конфигурации Keycloak, без конвертера Json, без класса свойств и т. д.)

Код: Выделить всё

@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();
}
}
И, наконец, OAuth2ResourceServerController.java

Код: Выделить всё

@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"));
}
}
После этих настроек я запускаю проект на порту 8081 (все порты клиента keycloak, связанные с URL-адресами, изменены с 8080 на 8081) и создаю токен аутентификации для имен пользователей с помощью jdoe< /strong> через Почтальона. После успешного создания токена доступа я использую этот токен для авторизации с типом токена на предъявителя, как было предложено, но если я это сделаю, я получаю ошибку 401.
После того, как я получил эту ошибку, я искал множество различных предлагаемых подходов, таких как использование типа авторизации OAuth2.0 в Postman или изменение настроек appspetting.json, но ничего не решило мою проблему.
Я чувствую, что меня не хватает что-то, но я не смог найти, что это такое, поэтому я здесь.

Подробнее здесь: https://stackoverflow.com/questions/784 ... ing-boot-3
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»