Saya menggunakan ocelot sebagai gateway API untuk layanan microser saya dengan IdentityServer4 untuk otentikasi. Dalam file konfigurasi ocelot saya menambahkan "AuthenticationOptions" dan mengatur kunci api. Di Startup saya menambahkan server Identity. Di server identitas saya menggunakan nilai dari header untuk secara dinamis membangun string koneksi. Ketika saya mengirim permintaan untuk mendapatkan token, tajuk dapat diakses di layanan identitas. Tetapi ketika saya mengirim permintaan berikutnya dengan tajuk asli token tidak tersedia. Hanya tajuk "Host" yang dapat dilihat di layanan identitas.
Apakah ada cara untuk menjaga tajuk asli saat merutekan permintaan ke server identitas?
Startup.cs (Tambah server identitas)
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
Chamal Pradeep Rajapakse
sumber
sumber
Jawaban:
Saya tidak terbiasa dengan Ocelot, tetapi dalam arsitektur saya, saya memiliki IdentityServer berjalan di belakang Load Balancer dan dialihkan dalam cluster Kubernetes melalui Nginx Ingress dan ini mengharuskan saya untuk mengkonfigurasi penerusan header dalam
Startup.Configure
metode IdentityServer saya seperti:sumber