Sto usando Ocelot come gateway API per i miei microservizi con IdentityServer4 per l'autenticazione. Nel file di configurazione ocelot ho aggiunto "AuthenticationOptions" e impostato la chiave API. In avvio aggiungo il server di identità. Nel server delle identità utilizzo il valore dall'intestazione per creare dinamicamente la stringa di connessione. Quando invio la richiesta per ottenere il token, le intestazioni sono accessibili nel servizio identità. Ma quando invio la prossima richiesta con il token, le intestazioni originali non sono disponibili. Nel servizio identità è visibile solo l'intestazione "Host".
Esiste un modo per mantenere l'intestazione originale durante il routing della richiesta al server di identità?
Startup.cs (Aggiungi server identità)
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": []
}
}]