Keycloak InvalidBearerTokenException Неверный эмитентJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Keycloak InvalidBearerTokenException Неверный эмитент

Сообщение Anonymous »

У меня есть серверная часть Java Spring, работающая в контейнере докера, а затем Keycloak также работает в отдельном контейнере. Оба в своих собственных сетях.
Когда я пытаюсь сделать запрос к серверной части Java, защищенной ключом BE с OAUTH, я получаю следующую ошибку:

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

InvalidBearerTokenException: Invalid issuer
Я устанавливаю местоположение сервера keycloak в Java в качестве IP-адреса шлюза контейнера. Насколько я понимаю, IP-адрес этого шлюза не совпадает с URL-адресом эмитента, поэтому он выдает эту ошибку.
Я рассмотрел этот и этот вопросы и попытался реализовать некоторые решения, но безрезультатно. Возможно, я их не понимаю.
Я пытался установить KEYCLOAK_FRONTEND_URL на панели администратора для IP-адреса шлюза API, но это не позволяет мне получить токен доступа в почтальоне, он будет перенаправляться на этот IP-адрес и прерывать поток аутентификации.
Я также пытался установить это:

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

  PROXY_ADDRESS_FORWARDING: "true"
KEYCLOAK_FRONTEND_URL: "https://example.com/auth"
Не повезло.
Может ли кто-нибудь сказать мне, что я делаю неправильно, и указать мне правильное направление? Сообщите мне, если вам нужна дополнительная информация.
Вот как выглядит мой фильтр безопасности на серверной стороне:

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

    @Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeHttpRequests(authorize -> {
try {
authorize
.antMatchers(HttpMethod.DELETE, "/development/deleteAllUsers").permitAll()
.mvcMatchers(HttpMethod.POST, "/createUser").permitAll()
.mvcMatchers(HttpMethod.GET,"/test").permitAll()
.anyRequest().authenticated();
} catch (Exception e) {
throw new RuntimeException(e);
}
})
.oauth2ResourceServer(
oauth2 -> oauth2.authenticationManagerResolver(getJwtIssuerAuthenticationManagerResolver()));

http.headers()
.xssProtection()
.disable()
.frameOptions()
.deny()
.contentSecurityPolicy("default-src 'self'");

return http.build();
}

@Bean("CurrentUser")
public Supplier currentUser() {
return () -> (JwtAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
}

private JwtIssuerAuthenticationManagerResolver getJwtIssuerAuthenticationManagerResolver() {
Map managers = providersProperty.getProviders()
.values()
.stream()
.collect(Collectors.toMap(p -> p.getIssuerUri(),
p -> jwtProviderStrategy.getProvider(p.getKey())::authenticate));

return new JwtIssuerAuthenticationManagerResolver(managers::get);
}
Также я устанавливаю эти свойства в application.yml

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

 jwk-set-uri: http://${KEYCLOAK_HOST:localhost}:${KEYCLOAK_PORT:8180}/auth/realms/myrealm/protocol/openid-connect/certs
issuer-uri: http://${KEYCLOAK_HOST:localhost}:${KEYCLOAK_PORT:8180}/auth/realms/myrealm
Если я запускаю серверную часть Java локально, она работает нормально. Просто ломается в докере.

Подробнее здесь: https://stackoverflow.com/questions/772 ... lid-issuer
Ответить

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

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

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

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

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