Estoy usando ocelot como puerta de enlace API para mis microservicios con IdentityServer4 para la autenticación. En el archivo de configuración de ocelot agregué "AuthenticationOptions" y configuré la clave api. En el inicio , agrego el servidor Identity. En el servidor de identidad, uso el valor del encabezado para generar dinámicamente la cadena de conexión. Cuando envío la solicitud para obtener el token, se puede acceder a los encabezados en el servicio de identidad. Pero cuando envío la próxima solicitud con el token, los encabezados originales no están disponibles. Solo el encabezado "Host" puede ser visible en el servicio de identidad.
¿Hay alguna manera de mantener el encabezado original mientras enruta la solicitud al servidor de identidad?
Startup.cs (Agregar servidor de identidad)
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": []
}
}]
fuente
Respuestas:
No estoy familiarizado con Ocelot, pero en mi arquitectura tengo IdentityServer ejecutándose detrás de Load Balancer y enrutado en un clúster de Kubernetes a través de un Nginx Ingress y esto me obligó a configurar el reenvío de encabezado en el
Startup.Configure
método de IdentityServer de esta manera:fuente