Tiêu đề yêu cầu không được chuyển tiếp đến IdentityServer4


9

Tôi đang sử dụng ocelot làm cổng API cho microservice của mình với IdentityServer4 để xác thực. Trong tệp cấu hình ocelot, tôi đã thêm "Xác thực" và đặt khóa api. Trong Startup tôi thêm máy chủ Nhận dạng. Trong máy chủ nhận dạng, tôi sử dụng giá trị từ tiêu đề để tự động xây dựng chuỗi kết nối. Khi tôi gửi yêu cầu nhận mã thông báo, các tiêu đề có thể truy cập được trong dịch vụ nhận dạng. Nhưng khi tôi gửi yêu cầu tiếp theo với các tiêu đề gốc mã thông báo không có sẵn. Chỉ tiêu đề "Máy chủ" có thể hiển thị trong dịch vụ nhận dạng.

Có cách nào để giữ tiêu đề gốc trong khi định tuyến yêu cầu đến máy chủ nhận dạng không?

Startup.cs (Thêm máy chủ nhận dạng)

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
Trước khi đi sâu vào nó, bạn có thể giải thích lý do tại sao bạn đang sử dụng các cổng khác nhau cho Xác thực máy chủ nhận dạng và API không? Tôi nghĩ vấn đề có thể xảy ra khi yêu cầu API được tạo ủy quyền nhận dạng cố gắng xác thực mã thông báo trên cùng một cổng nơi có API, vì vậy bạn có thể cung cấp cả hai cổng đó và thử nó.
Nauman Khan

Bạn có thể đăng một số mã cho thấy cách bạn đang cố gắng truy cập vào các tiêu đề để xây dựng chuỗi kết nối của bạn không? Ngoài ra, tiêu đề nào bạn đang cố đọc? Nếu đó là tiêu đề máy chủ thì bạn sẽ gặp vấn đề.
Nix

Câu trả lời:


0

Tôi không quen thuộc với Ocelot, nhưng trong kiến ​​trúc của tôi, tôi có IdentityServer chạy phía sau Load Balancer và được định tuyến trong cụm Kubernetes thông qua Nginx Ingress và điều này yêu cầu tôi phải định cấu hình chuyển tiếp tiêu đề trong Startup.Configurephương thức của IdentityServer như vậy:

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

forwardOptions.KnownNetworks.Clear();
forwardOptions.KnownProxies.Clear();
app.UseForwardedHeaders(forwardOptions);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.