JWT Keycloak не является валидныйм при получении его с запущеного докер контейнера
Проблема такова, что у меня сервисы работающие на localhost обращались на keycloak работающий в докере, и при генерации токена доступа, такой параметр как issuer-uri был прописан как localhost,в aplication.yml, и при получении токена и при расшифровке его через jwt.io там атрибут "iss": был "http://localhost:8080/auth/realms/task-realm", ну тобиж тоже на localhost. После того как я закинул контейнер с сервисом в докер, с вот такими настройками:
resource-server:
jwt:
issuer-uri: http://keycloak:8080/auth/realms/task-realm
jwk-set-uri: http://keycloak:8080/auth/realms/task-realm/protocol/openid-connect/certs
У меня начала лететь 401 ошибка, при попытке попасть на засекьюреный энд поинт, в логах было следующее
Securing GET /api/v1/company
2024-09-21T20:44:18.915158897Z 2024-09-21T20:44:18.914Z DEBUG 1 --- [companies-service] [nio-8084-exec-7] o.s.s.oauth2.jwt.JwtClaimValidator : The iss claim is not valid
2024-09-21T20:44:18.915212584Z 2024-09-21T20:44:18.915Z DEBUG 1 --- [companies-service] [nio-8084-exec-7] o.s.s.o.s.r.a.JwtAuthenticationProvider : Failed to authenticate since the JWT was invalid
Ну тоесть по логам видно что проблема как раз в этом поле. Я решил опять расшифровать этот токен, и там в поле iss был все тот же "http://localhost:8080/auth/realms/task-realm" как я понял он при переносе сервсиа в докер по прежнему остался прежним, но теперь как бы его нужно получать не по localhost, а по имени контейнера keycloak, так вот вопрос может кто знает как это решить?
Ответы (1 шт):
Вообщем я решил это таким образом : я зашел в настройки realm в keycloak admin(Realm setting) на вкладке General, нужно найти поле Frontend URL, и вписал туда "http://keycloak:8080/auth"