Сервер и клиент OAuth2 в одной и той же сети Docker - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь запустить тестовый клиент OAuth2 в той же сети Docker, что и сервер OAuth2. Идея состоит в том, чтобы разрешить тестирование всего приложения без необходимости запуска внешнего клиента OAuth2.

Проблема, с которой я сталкиваюсь, заключается в том, что конечная точка сервера OAuth2, которая передается клиенту OAuth2, доступна только за пределами сети Docker на моем локальном компьютере (для этого я использую простой прокси-сервер nginx, см. Ниже). Поэтому, когда клиент пытается получить токен при вызове обратного вызова, он не может разрешить имя хоста (поскольку «localhost» в контексте контейнера клиента ссылается на локальную сеть этого контейнера, но «localhost» в моем браузере относится к самой сети Docker). В идеале я хотел бы продолжать использовать nginx в качестве прокси для более хороших имен хостов во время разработки.

Чтобы уточнить, этот процесс в настоящее время работает:

  1. Пользователь посещает app.localhost в своем браузере
  2. Пользователь перенаправляется на auth.localhost для попытки входа в систему
  3. Пользователь вводит свои учетные данные, пользователь перенаправляется на обратный вызов
  4. Ошибки обратного вызова, поскольку он не может правильно получить токен доступа из auth.localhost

Вот мой docker-compose, для краткости удалены нерелевантные части:

version: '3'
services:
  hydra:
    image: oryd/hydra:v1.0.0-beta.9
    depends_on:
      - hydra-migrate
    command:
      serve all --dangerous-force-http
    environment:
      - OAUTH2_ISSUER_URL=http://auth.localhost/
      - OAUTH2_CONSENT_URL=http://auth.localhost/consent
      - OAUTH2_LOGIN_URL=http://auth.localhost/auth/login
      - DATABASE_URL=postgres://hydra@postgres:5432/hydra?sslmode=disable
      - SYSTEM_SECRET=youReallyNeedToChangeThis
      - OAUTH2_SHARE_ERROR_DEBUG=1
      - OIDC_SUBJECT_TYPES_SUPPORTED=public,pairwise
      - OIDC_SUBJECT_TYPE_PAIRWISE_SALT=youReallyNeedToChangeThis

  nginx:
    image: nginx
    ports:
      - "80:80"
    volumes:
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - hydra
      - oauth2-test

  oauth2-test:
    build: https://github.com/chatlogs/oauth2-simple-client.git
    environment:
      - APP_URL=http://app.localhost
      - OAUTH2_URL=http://auth.localhost
      - OAUTH2_CLIENT_ID=test
      - OAUTH2_CLIENT_SECRET=secret
    depends_on:
      - hydra-create-client

А вот мой nginx.conf:

events {
  worker_connections  1024;
}

http {
  # Proxy ChatLogs Auth and Hydra OAuth server
  server {
    listen  80;
    server_name  auth.localhost;

    location ^~ / {
      proxy_pass  http://chatlogs-auth:3000;
    }

    location ^~ /oauth2 {
      proxy_pass  http://hydra:4444/oauth2;
    }
  }

  server {
    listen  80;
    server_name  app.localhost;

    location / {
      proxy_pass http://oauth2-test:3000;
    }
  }
}

Это ошибка, которую показывает oauth2-test:

oauth2-test_1          | { Error: getaddrinfo ENOTFOUND auth.localhost auth.localhost:80
oauth2-test_1          |     at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:57:26)
oauth2-test_1          |   errno: 'ENOTFOUND',
oauth2-test_1          |   code: 'ENOTFOUND',
oauth2-test_1          |   syscall: 'getaddrinfo',
oauth2-test_1          |   hostname: 'auth.localhost',
oauth2-test_1          |   host: 'auth.localhost',
oauth2-test_1          |   port: 80,
oauth2-test_1          |   trace:
oauth2-test_1          |    [ { method: 'POST', url: 'http://auth.localhost/oauth2/token' } ],
oauth2-test_1          |   isBoom: true,
oauth2-test_1          |   isServer: true,
oauth2-test_1          |   data: null,
oauth2-test_1          |   output:
oauth2-test_1          |    { statusCode: 502,
oauth2-test_1          |      payload:
oauth2-test_1          |       { message:
oauth2-test_1          |          'Client request error: getaddrinfo ENOTFOUND auth.localhost auth.localhost:80',
oauth2-test_1          |         statusCode: 502,
oauth2-test_1          |         error: 'Bad Gateway' },
oauth2-test_1          |      headers: {} },
oauth2-test_1          |   reformat: [Function] }

Любая помощь приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...