Заголовок запиту не пересилає IdentityServer4


9

Я використовую окелот як шлюз API для своїх мікросервісів з IdentityServer4 для аутентифікації. У конфігураційний файл ocelot я додав "AuthenticationOptions" і встановив ключ api. В Запуск я додаю сервер Identity. На сервері ідентифікації я використовую значення з заголовка для динамічної побудови рядка з'єднання. Коли я надсилаю запит на отримання маркера, заголовки доступні в службі посвідчення. Але коли я надсилаю наступний запит із токеном, оригінальні заголовки недоступні. У службі ідентифікації можна побачити лише заголовок "Хост".

Чи є спосіб зберегти початковий заголовок під час маршрутизації запиту на сервер ідентифікації?

Startup.cs (Додати сервер ідентифікації)

services
    .AddAuthentication()
    .AddIdentityServerAuthentication("APIParts", options =>
    {
        options.Authority = "http://localhost:60168";
        options.RequireHttpsMetadata = false;
        options.ApiName = "Parts";
        options.SupportedTokens = SupportedTokens.Both;
    });

ocelot.json

ReRoutes": [
{
  "DownstreamPathTemplate": "/connect/token",
  "DownstreamScheme": "http",
  "DownstreamHostAndPorts": [
    {
      "Host": "localhost",
      "Port": 60168
    }
  ],
  "UpstreamPathTemplate": "/token",
  "UpstreamHttpMethod": [ "Post" ]
},
{
  "DownstreamPathTemplate": "/api/Parts/Inventory",
  "DownstreamScheme": "http",
  "DownstreamHostAndPorts": [
    {
      "Host": "localhost",
      "Port": 65241
    }
  ],
  "UpstreamPathTemplate": "/api/Parts/Inventory",
  "AuthenticationOptions": {
    "AuthenticationProviderKey": "APIParts",
    "AllowedScopes": []
  }
}]

1
Перш ніж заглиблюватися в нього, ви можете пояснити, чому ви використовуєте різні порти для автентифікації і API сервера Identity ?. Я думаю, що проблема може виникнути, як коли згенеровано запит на API, авторизація намагається перевірити маркер на тому самому порту, де є API, тож чи можете ви дати і той же порт, і спробувати його.
Науман Хан

Чи можете ви опублікувати якийсь код, який показує, як ви намагаєтеся отримати доступ до заголовків для складання рядка з'єднання? Крім того, який заголовок ви намагаєтеся прочитати? Якщо це заголовок хоста, у вас виникнуть проблеми.
Нікс

Відповіді:


0

Я не знайомий з Ocelot, але в моїй архітектурі я маю IdentityServer, що працює за балансиром завантаження і направляється в кластер Kubernetes через Nginx Ingress, і це вимагало від мене налаштування переадресації заголовка у такому Startup.Configureметоді IdentityServer :

var forwardOptions = new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
    RequireHeaderSymmetry = false
};

forwardOptions.KnownNetworks.Clear();
forwardOptions.KnownProxies.Clear();
app.UseForwardedHeaders(forwardOptions);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.