Промежуточное ПО не вызывается после аутентификации в шлюзе API с многотенантной настройкойC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Промежуточное ПО не вызывается после аутентификации в шлюзе API с многотенантной настройкой

Сообщение Anonymous »

Я работаю над шлюзом API, используя Ocelot для маршрутизации запросов и IdentityServer4 для аутентификации. Настройка включает в себя мультитенантную систему, в которой информация об арендаторе разрешается с помощью IMultiTenantContextAccessor из строки запроса.
Проблема, с которой я столкнулся, заключается в том, что ни один промежуточного программного обеспечения в моих нижестоящих службах подвергаются воздействию после аутентификации запроса через шлюз API. Информация о клиенте остается нулевой, поскольку промежуточное программное обеспечение, ответственное за определение клиента, никогда не вызывается. Однако если я напрямую обращаюсь к нисходящему API (минуя шлюз и аутентификацию), все работает нормально — промежуточное программное обеспечение выполняется, и клиент разрешается правильно.
Вот разбивка настройки :
  • API-шлюз: использует Ocelot и настроен с помощью IdentityServer4 для аутентификации.
  • Downstream API: реализует мультитенантность с промежуточным программным обеспечением для определения клиента из строки запроса.
  • Проблема: когда запрос маршрутизируется через шлюз API и после проверки подлинности промежуточное программное обеспечение в нижестоящей службе (например, разрешение арендатора) не вызывается, в результате чего арендатор остается нулевым. Без аутентификации нисходящий API работает должным образом, и клиент разрешается правильно.
Конфигурация в ocelot.json:

Конфигурация в ocelot.json:

р>

Код: Выделить всё

{
"DownstreamPathTemplate": "/api/{everything}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 41582
}
],
"UpstreamPathTemplate": "/example-api/{everything}",
"RateLimitOptions": {
"ClientWhitelist": [],
"EnableRateLimiting": true,
"Period": "1s",
"PeriodTimespan": 1,
"Limit": 100
},
"AuthenticationOptions": {
"AuthenticationProviderKey": "TestKey",
"AllowedScopes": []
},
"Key": "example.api"
}

Конвейер промежуточного программного обеспечения в нисходящем API:

Код: Выделить всё

 app.UseMultiTenant();
app.UseSerilogRequestLogging();
app.UseCustomErrorHandlingMiddleware();
app.UseSwagger();
app.UseSwaggerUI();
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
Что работает:
Если я подключусь к нисходящему API **напрямую, минуя шлюз API** (т. е. без аутентификации), Конвейер промежуточного программного обеспечения работает нормально, и клиент разрешается правильно.
Что не получается:
Когда запрос аутентифицируется через шлюз API, нижестоящая служба промежуточные программы (например, UseMultiTenant()) никогда не выполняются, оставляя арендатора null.
Что я пробовал< /strong>:
  • Проверен порядок промежуточного программного обеспечения, чтобы убедиться, что UseMultiTenant() находится перед UseAuthentication() .
  • Включено подробное ведение журнала в Ocelot, но не обнаружено проблем, связанных с пересылкой запросов.
  • Проверено, что нисходящий API правильно настроен для проверки токен с помощью AddJwtBearer.

Вопросы
:
  • Почему промежуточное программное обеспечение нижестоящей службы (например, UseMultiTenant()) не затрагивается после аутентификации через шлюз API?
  • Как можно Я гарантирую, что промежуточное программное обеспечение разрешения арендаторов вызывается, когда запрос проходит через шлюз API с аутентификацией?
Есть предложения о том, что может быть причиной неисправности промежуточного программного обеспечения пропущен или как это отладить, будем очень признательны!

Подробнее здесь: https://stackoverflow.com/questions/789 ... tenant-set
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»