Ich verwende ocelot als API-Gateway für meine Microservices mit IdentityServer4 zur Authentifizierung. In der ocelot-Konfigurationsdatei habe ich "AuthenticationOptions" hinzugefügt und den API-Schlüssel festgelegt. Im Startup füge ich den Identity Server hinzu. Auf dem Identitätsserver verwende ich den Wert aus dem Header, um die Verbindungszeichenfolge dynamisch aufzubauen. Wenn ich die Anforderung zum Abrufen eines Tokens sende, sind Header im Identitätsdienst verfügbar. Aber wenn ich die nächste Anfrage mit dem Token sende, sind die ursprünglichen Header nicht verfügbar. Im Identitätsdienst kann nur der Header "Host" angezeigt werden.
Gibt es eine Möglichkeit, den ursprünglichen Header beizubehalten, während die Anforderung an den Identitätsserver weitergeleitet wird?
Startup.cs (Identitätsserver hinzufügen)
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": []
}
}]
quelle
Antworten:
Ich bin mit Ocelot nicht vertraut, aber in meiner Architektur läuft IdentityServer hinter einem Load Balancer und wird über einen Nginx Ingress in einem Kubernetes-Cluster weitergeleitet. Daher musste ich die Header-Weiterleitung in der
Startup.Configure
Methode meines IdentityServers wie folgt konfigurieren :quelle