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": []
}
}]
c#
.net-core
identityserver4
ocelot
Chamal Pradeep Rajapakse
źródło
źródło
Odpowiedzi:
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.Configure
metodzie mojej tożsamości :źródło