Я использую ocelot в качестве шлюза API для своих микросервисов с IdentityServer4 для аутентификации. В конфигурационном файле ocelot я добавил «AuthenticationOptions» и установил ключ API. В автозагрузке я добавляю сервер идентификации. На сервере идентификации я использую значение из заголовка для динамического построения строки подключения. Когда я отправляю запрос на получение токена, заголовки становятся доступны в сервисе идентификации. Но при отправке следующего запроса с токеном оригинальные заголовки недоступны. Только заголовок «Хост» может быть виден в службе идентификации.
Есть ли способ сохранить оригинальный заголовок при маршрутизации запроса на сервер идентификации?
Startup.cs (Добавить идентификационный сервер)
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": []
}
}]
c#
.net-core
identityserver4
ocelot
Чамал Прадип Раджапаксе
источник
источник
Ответы:
Я не знаком с Ocelot, но в моей архитектуре IdentityServer работает за балансировщиком нагрузки и маршрутизируется в кластере Kubernetes через Nginx Ingress, и это потребовало от меня настройки пересылки заголовков в
Startup.Configure
методе IdentityServer следующим образом:источник