gpt4 book ai didi

c# - 请求 header 未转发到 IdentityServer4

转载 作者:行者123 更新时间:2023-12-01 19:53:09 26 4
gpt4 key购买 nike

我使用 ocelot 作为我的微服务的 API 网关,并使用 IdentityServer4 进行身份验证。在 ocelot 配置文件中,我添加了“AuthenticationOptions”并设置了 api key 。在启动中,我添加了身份服务器。在身份服务器中,我使用 header 中的值来动态构建连接字符串。当我发送请求以获取 token 时,可以在身份服务中访问 header 。但是当我使用 token 发送下一个请求时,原始 header 不可用。只有“Host” header 在身份服务中可见。

有没有办法在将请求路由到身份服务器时保留原始 header ?

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

最佳答案

我不熟悉 Ocelot,但在我的架构中,我有 IdentityServer 在负载均衡器后面运行,并通过 Nginx Ingress 在 Kubernetes 集群中路由,这需要我在 IdentityServer 的 Startup.Configure 中配置 header 转发。方法如下:

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

forwardOptions.KnownNetworks.Clear();
forwardOptions.KnownProxies.Clear();
app.UseForwardedHeaders(forwardOptions);

关于c# - 请求 header 未转发到 IdentityServer4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58170623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com