J'utilise ocelot comme passerelle API pour mes microservices avec IdentityServer4 pour l'authentification. Dans le fichier de configuration ocelot, j'ai ajouté "AuthenticationOptions" et défini la clé api. Dans le démarrage, j'ajoute le serveur d'identité. Dans le serveur d'identité, j'utilise la valeur de l'en-tête pour créer dynamiquement la chaîne de connexion. Lorsque j'envoie la demande de jeton, les en-têtes sont accessibles dans le service d'identité. Mais lorsque j'envoie la prochaine demande avec le jeton, les en-têtes d'origine ne sont pas disponibles. Seul l'en-tête "Host" peut être visible dans le service d'identité.
Existe-t-il un moyen de conserver l'en-tête d'origine lors du routage de la demande vers le serveur d'identité?
Startup.cs (Ajouter un serveur d'identité)
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": []
}
}]