İstek başlığı IdentityServer4'e yönlendirmiyor


9

Kimlik doğrulama için IdentityServer4 ile mikro hizmetlerim için ocelot API ağ geçidi olarak kullanıyorum. Ocelot yapılandırma dosyasına "AuthenticationOptions" ı ekledim ve api anahtarını ayarladım. In Başlangıç ben Kimlik sunucu eklemek. Kimlik sunucusunda bağlantı dizesini dinamik olarak oluşturmak için üstbilgiden değer kullanıyorum. Jeton alma isteğini gönderdiğimde, kimlik hizmetinden başlıklara erişilebilir. Ancak jetonla bir sonraki istek gönderdiğimde orijinal başlıklar mevcut değildir. Kimlik hizmetinde yalnızca "Ana Bilgisayar" başlığı görülebilir.

İsteği kimlik sunucusuna yönlendirirken orijinal üstbilgiyi korumanın bir yolu var mı?

Startup.cs (Kimlik sunucusu ekle)

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

1
Derinlemesine gitmeden önce, Kimlik Sunucusu Kimlik Doğrulaması ve API'ları için neden farklı bağlantı noktaları kullandığınızı açıklayabilirsiniz. API isteği oluşturulduğunda kimlik yetkilendirme, API'lerin bulunduğu aynı bağlantı noktasında jetonu doğrulamaya çalıştığında sorun olabileceğini düşünüyorum, bu yüzden hem aynı bağlantı noktasını verebilir hem de deneyebilirsiniz.
Nauman Khan

Bağlantı dizenizi oluşturmak için başlıklara nasıl erişmeye çalıştığınızı gösteren bir kod gönderebilir misiniz? Ayrıca hangi başlığı okumaya çalışıyorsunuz? Eğer ana bilgisayar üstbilgisi ise sorunlarınız olacaktır.
Nix

Yanıtlar:


0

Ocelot'a aşina değilim, ancak mimarımda bir Yük Dengeleyici'nin arkasında çalışan ve Nginx Ingress aracılığıyla bir Kubernetes kümesinde yönlendirilmiş olan IdentityServer'ım var ve bu, IdentityServer'ımın Startup.Configureyönteminde başlık iletmeyi yapılandırmamı gerektiriyordu :

var forwardOptions = new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
    RequireHeaderSymmetry = false
};

forwardOptions.KnownNetworks.Clear();
forwardOptions.KnownProxies.Clear();
app.UseForwardedHeaders(forwardOptions);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.