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": []
}
}]