我使用的是YARP构建的反向代理.这是我的配置:
"ReverseProxy": {
"Routes": {
"ChatHub": {
"ClusterId": "ChatHub",
"Match": {
"Path": "/api/chathub/{*any}"
},
"Transforms": [
{
"PathRemovePrefix": "/api/chathub"
},
{
"RequestHeadersCopy": true
},
{
"RequestHeaderOriginalHost": true
},
{
"RequestHeader": "Upgrade",
"Set": "WebSocket"
},
{
"RequestHeader": "Connection",
"Set": "Upgrade"
},
{
"RequestHeaderRemove": "Cookie"
},
{
"X-Forwarded": "Set",
"For": "Append",
"Proto": "Append",
"Prefix": "Append",
"HeaderPrefix": "X-Forwarded-"
},
]
}
},
"Clusters": {
"ChatHub": {
"SessionAffinity": {
"Enabled": true,
"Policy": "HashCookie",
"FailurePolicy": "Redistribute",
"AffinityKeyName": "ChatHubAffinityKey",
"Cookie": {
"HttpOnly": true,
"IsEssential": true,
"SameSite": "Strict",
"SecurePolicy": "Always"
}
},
"LoadBalancingPolicy": "PowerOfTwoChoices",
"Destinations": {
"ChatHub/Dest1": {
"Address": "https://localhost:7140"
},
"HealthCheck": {
"Active": {
"Enabled": true,
"Interval": "00:00:15",
"Timeout": "00:00:10",
"Policy": "ConsecutiveFailures",
"Path": "/health"
},
"Passive": {
"Enabled": true,
"Policy": "TransportFailureRate",
"ReactivationPeriod": "00:00:15"
}
}
}
}
}
}
如你所见,我在代理时删除了每个cookie.我已经编写了在配置代理的位置提取访问令牌的逻辑,如下所示:
services.AddReverseProxy()
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"))
.AddTransforms(builder =>
{
builder.AddRequestTransform(async (ctx) =>
{
var accessToken = await ctx.HttpContext.GetTokenAsync("access_token");
ctx.ProxyRequest.Headers.Add("Authorization", $"Bearer {accessToken}");
});
});