#docker #.net-core #docker-compose #openiddict
#докер #.net-ядро #докер-сочинение #openiddict
Вопрос:
Я пытаюсь запустить OpenIddict в Docker вместе с Api, Api взаимодействует с приложением OppenIddict через определенную ссылку в docker-compose ( api
-gt; gt; login
). У меня есть интерфейсное приложение, работающее за пределами Docker, с доступом к Api и localhost
адресами для входа. Все работает нормально до тех пор, пока Api не взаимодействует с приложением для входа в систему, используя связанный адрес ( login
), проблема в том, что эмитент токена не совпадает. Эмитент находится в этом случае http://localhost:4000
, и он ожидает http://login
, когда OpenIddict проверит токен.
Я попытался изменить эмитента , Startup
и OpenIddictServerBuilder
проблема в том, что он изменяет базовый адрес, используемый в документе обнаружения, в результате чего интерфейс пытается подключиться http://login
.
Одним из возможных решений этой проблемы является изменение файла hosts и установка сетевого перенаправления (перенаправление login
на 127.0.1.1
и настройка сетевого перенаправления для использования localhost:4000), но это кажется слишком сложным решением.
У меня были аналогичные проблемы IdentityServer4
, но там вы можете изменить эмитента, не затрагивая базовый адрес.
Надеюсь, что я достаточно хорошо объясню проблему, любые идеи действительно ценятся!
Ответ №1:
Наконец-то разобрались, вы можете указать список допустимых эмитентов во время настройки сервера OpenIddict в Startup
. Здесь я могу сказать, что http://localhost:4000
это действительный эмитент, и поэтому токен будет действителен, когда Api подтвердит его, даже если он обменивается данными по другому адресу. Я сделал это так, если это кому-нибудь поможет в будущем:
services.AddOpenIddict() .AddCore() .AddServer(builder =gt; { builder.Configure(options =gt; { options.TokenValidationParameters.ValidIssuers = new Listlt;stringgt; { "http://localhost:4000/", }; }); });