ฉันใช้ ocelot เป็นเกตเวย์ API สำหรับ microservices ของฉันด้วย 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": []
}
}]