Токен обновления Keycloak в K8s. Неверный эмитент токена из внутренней сети.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Токен обновления Keycloak в K8s. Неверный эмитент токена из внутренней сети.

Сообщение Anonymous »

У меня есть стандартное приложение на основе микросервиса, работающее в K8s. Thers — это шлюз API, который управляет связью между компонентами.
Существует развернутый Keycloak, который должен аутентифицировать пользователей с помощью OAuth2.
Фронтенд — ReactJS. приложение, которое в основном взаимодействует с серверной частью. А серверная часть — это приложение Spring Boot, в котором поставщик OAuth2 настроен как Keycloak.
Предположим, приложение доступно на https://myapp.mydomain.com. Когда пользователь проходит аутентификацию, сохраняются access_token иrefresh_token. Поле iss токенов — https://myapp.mydomain.com/realms/MYREALM.
Связь с внешним интерфейсом работает, поскольку шлюз API заголовки пересылки, такие как X-Forwarded-Host, X-Forwarded-Port, X-Forwarded-Scheme и т. д. И Keycloak, хотя и работает на keycloak-service:8080, может динамически обновлять информацию.
Пока все хорошо.
Проблема в том, что серверная часть хотел бы обновить токен. URL-адрес токена отличается от того, что записано в поле iss, поскольку серверная часть взаимодействует внутри K8s со службой Keycloak по адресу http://keycloak-service:8080. И из-за этого я всегда получаю сообщение об ошибке. Не удалось обновить токен: [invalid_grant] Неверный эмитент токена. Ожидается https://myapp.mydomain.com/realms/MYREALM'.
Я использую Keycloak версии 24.0.2, используя quay.io/keycloak/keycloak:24.0 .2-0 image.
И переменные настроены так, чтобы обеспечить динамическое разрешение хоста для работы во внешнем интерфейсе:

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

        - name: KC_HOSTNAME_STRICT
value: 'false'
- name: KC_HOSTNAME_STRICT_HTTPS
value: 'false'
- name: JAVA_OPTS_APPEND
value: '-Djgroups.dns.query=keycloak-service-headless'
- name: KC_PROXY
value: edge
- name: KC_HTTP_PORT
value: '8080'
- name: KC_HTTP_ENABLED
value: 'true'
- name: PROXY_ADDRESS_FORWARDING
value: 'true'

Я пытался использовать различные комбинации настроек Keycloak, в том числе использование KC_HOSTNAME, KC_FRONTEND_URL, использование URL-адреса внешнего интерфейса в настройках области или комбинацию имен эмитентов. . Ничего не работает. И серверная часть не создает динамически заголовки X-Forwarded, которые можно использовать таким же образом, как и связь, поступающую от внешнего интерфейса через шлюз API.
Единственный способ сделать его работа заключается в том, чтобы разрешить связь через настроенные записи DNS и установить URL-адрес токена в том же домене, т. е. https://myapp.mydomain.com/realms/MYREA ... nect/token вместо http://keycloak-service:8080/realms/MYR ... nect/token.
Это нормально, однако я не хочу маршрутизировать связь за пределами K8, а затем обратно внутри K8 для службы Keycloak. Это создает задержку и затраты на облако, в которых нет необходимости, когда обе службы работают в одном пространстве имен.
Любой, у кого есть опыт правильной настройки этого, чтобы он работал из внешнего интерфейса, работающего в браузере, и серверная часть, использующая внутренние имена служб K8s?

Подробнее здесь: https://stackoverflow.com/questions/792 ... al-network
Ответить

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

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

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

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

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