Ошибка перенаправления URI OIDC в докеризованном Django
Я запускаю два приложения с помощью docker-compose. Каждое приложение имеет кучу контейнеров. Планируется, что App A (приложение django) будет размещать провайдера OIDC, а App B (какое-то другое приложение) будет аутентифицировать пользователей, вызывая API App A.
Я использую библиотеку django-oidc-provider (https://django-oidc-provider.readthedocs.io/en/latest/index.html)
Я уже настроил интеграцию OIDC с обеих сторон. Однако каждый раз, когда App B перенаправляет на App A, я сталкиваюсь со следующей ошибкой:
Redirect URI Error
The request fails due to a missing, invalid, or mismatching redirection URI (redirect_uri).
Даже если redirect_uri точно совпадает с обеих сторон.
Вот мой docker-compose.yml:
В приведенном выше примере контейнер datahub-frontend-react должен интегрироваться в контейнер dqt для аутентификации OIDC.
Журнал докера не показывает никаких исключений, а http-код равен 200:
dqt | [28/Feb/2022 10:43:43] "GET /openid/.well-known/openid-configuration/ HTTP/1.1" 200 682
dqt | [28/Feb/2022 10:43:44] "GET /openid/authorize?response_type=code&redirect_uri=http%3A%2F%2Fdatahub%3A9002%2F%2Fcallback%2Foidc&state=9Fj1Bog-ZN8fhN2kufWng2fRGaqCYnkMz6n3yKxPowo&client_id=778948&scope=openid+profile+email HTTP/1.1" 200 126
Вот конфигурация redirect_uri в админке django:

Я подозреваю, что это может быть связано с тем, что это разные контейнеры с разными именами хостов (я не знаю, что с этим делать).
Что может быть основной причиной этой проблемы?
Ваш журнал показывает, что приложение перенаправляет с этим URL для входа в систему, с двумя символами %2F, поэтому URL, используемый приложением, отличается от настроенного:
http://datahub:9002//callback/oidc
ВНУТРЕННИЕ И ВНЕШНИЕ URL
Не уверены, что он будет работать, когда вы решите эту проблему, однако, поскольку URL обратного вызова выглядит как внутренний URL Docker Compose, который браузер не сможет получить. Вместо этого старайтесь возвращать URL, например, такой:
http://localhost:9002/callback/oidc
Один из вариантов, который может быть полезен для того, чтобы сделать URL более понятными во время разработки, а также для планирования реального развертывания, - это добавить пользовательские имена хостов в файл hosts вашего компьютера. Тогда вы сможете входить в систему через такие URL, как http://www.myapp.com, что мне кажется более понятным.
Посмотрите эти ресурсы, чтобы было с чем сравнивать, которые описывают установку с внутренними и внешними URL-адресами.