Доступ к Keycloak-Service внутри Docker по псевдониму сети - PullRequest
1 голос
/ 03 мая 2020

Сценарий

У меня есть защищенный веб-сервис (JakartaEE + Microprofile + JWT), работающий в открытом доступе. В качестве эмитента токена jwt я использую keycloak. Для тестирования и разработки я хочу запустить обе службы в docker. Поэтому я написал docker -композитный файл. В качестве тестового клиента я использую JUnit с microprofile-client. Это работает за пределами docker.

Проблема

Я могу получить токен JWT через локальный хост на хосте, например:

POST /auth/realms/DC/protocol/openid-connect/token HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded

realm=DC&grant_type=password&client_id=dc&username=dc_editor&password=******

Проблема в том, что с точки зрения webservice localhost не является сервером keycloak. JWT-Token-Validation против эмитента завершается неудачей.

Цель

Я хочу получить доступ к серверу keycloak с хоста с его docker -наличным внутренним сетевым псевдонимом - например, dcAuthServer. JWT-токен будет проверен правильно.

Код

Файл docker -composite выглядит следующим образом:

version: "3.8"
services:
  dcWebservice:
    environment:
      - DC_AUTH_SERVER_HOST=dcAuthServer
      - DC_AUTH_SERVER_PORT=8080
      - DC_AUTH_SERVER_REALM=DC
    image: dc_webservice:latest
    ports:
    - "9080:9080"
    networks:
      - dcNetwork

  dcAuthServer:
    image: dc_keycloak:latest
    ports:
    - "8080:8080"
    networks:
      dcNetwork:
        aliases:
            - dcAuthServer
    healthcheck:
      test: "curl --fail http://localhost:8080/auth/realms/DC || false"

networks:
  dcNetwork:

Среда DC_AUTH* используется в mpJwt-конфигурация в server.xml сервера open liberty:

<mpJwt id="dcMPJWT" audiences="dc" issuer="http://${DC_AUTH_SERVER_HOST}:${DC_AUTH_SERVER_PORT}/auth/realms/${DC_AUTH_SERVER_REALM}"
           jwksUri="http://${DC_AUTH_SERVER_HOST}:${DC_AUTH_SERVER_PORT}/auth/realms/${DC_AUTH_SERVER_REALM}/protocol/openid-connect/certs"/>

В issuer я должен поставить доверенного эмитента для токена JWT.

Надеюсь Я не забыл важную информацию - просто спросите!

Заранее спасибо Роберт

...