Проблемы с эмитентом токена при запуске OpenIddict в качестве контейнера

#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/",  };  });  });