Estou usando o jaguatirica como gateway de API para meus microsserviços com o IdentityServer4 para autenticação. No arquivo de configuração do ocelot, adicionei "AuthenticationOptions" e configurei a chave api. Na inicialização , adiciono o servidor de identidade. No servidor de identidade, uso o valor do cabeçalho para criar dinamicamente a cadeia de conexão. Quando envio a solicitação para obter o token, os cabeçalhos estão acessíveis no serviço de identidade. Mas quando eu enviar a próxima solicitação com o token, os cabeçalhos originais não estarão disponíveis. Somente o cabeçalho "Host" pode estar visível no serviço de identidade.
Existe uma maneira de manter o cabeçalho original ao rotear a solicitação para o servidor de identidade?
Startup.cs (Adicionar servidor de identidade)
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": []
}
}]
fonte
Respostas:
Não estou familiarizado com o Ocelot, mas em minha arquitetura eu tenho o IdentityServer executando atrás de um Load Balancer e roteado em um cluster Kubernetes por meio de um Nginx Ingress e isso exigiu que eu configurasse o encaminhamento de cabeçalho no
Startup.Configure
método do meu IdentityServer da seguinte maneira:fonte