Nagłówek żądania nie przekierowuje do IdentityServer4

9

Używam ocelot jako bramy API dla moich mikrousług z IdentityServer4 do uwierzytelniania. W pliku konfiguracyjnym ocelot dodałem „AuthenticationOptions” i ustawiłem klucz API. W startupie dodaję serwer tożsamości. Na serwerze tożsamości używam wartości z nagłówka, aby dynamicznie budować parametry połączenia. Kiedy wysyłam żądanie uzyskania tokena, nagłówki są dostępne w usłudze tożsamości. Ale kiedy wysyłam kolejne żądanie z tokenem, oryginalne nagłówki nie są dostępne. W usłudze tożsamości może być widoczny tylko nagłówek „Host”.

Czy istnieje sposób na zachowanie oryginalnego nagłówka podczas kierowania żądania do serwera tożsamości?

Startup.cs (Dodaj serwer tożsamości)

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": []
  }
}]
Chamal Pradeep Rajapakse
źródło
1
Przed wniknięciem w to możesz wyjaśnić, dlaczego używasz różnych portów do uwierzytelniania serwera tożsamości i interfejsów API? Myślę, że mogą występować problemy, ponieważ podczas generowania żądania API autoryzacja tożsamości próbuje zweryfikować token na tym samym porcie, na którym znajdują się interfejsy API, więc możesz podać zarówno ten sam port, jak i spróbować.
Nauman Khan
Czy możesz opublikować kod, który pokazuje, w jaki sposób próbujesz uzyskać dostęp do nagłówków w celu zbudowania ciągu połączenia? Dodatkowo jaki nagłówek próbujesz przeczytać? Jeśli to nagłówek hosta, będziesz mieć problemy.
Nix,

Odpowiedzi:

0

Nie znam Ocelota, ale w mojej architekturze mam IdentityServer działający za modułem równoważenia obciążenia i kierowany do klastra Kubernetes za pośrednictwem Nginx Ingress, co wymagało ode mnie skonfigurowania przekazywania nagłówka w Startup.Configuremetodzie mojej tożsamości :

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

forwardOptions.KnownNetworks.Clear();
forwardOptions.KnownProxies.Clear();
app.UseForwardedHeaders(forwardOptions);
Nick Cromwell
źródło