问题描述
我在 .net core 中使用 ocelot 实现了一个 API 网关。网关重定向所有 API,包括 Web 套接字连接。
显示 Web 套接字重定向的 ocelot json 示例。
{
"DownstreamPathTemplate": "/notification/{url}","DownstreamScheme": "ws","DownstreamHostAndPorts": [
{
"Host": "localhost","Port": "8082"
}
],"UpstreamPathTemplate": "/notification/{url}","Key": "","UpstreamHttpMethod": [ "Get","Post","Options" ],"Priority": 0
}
我还有一个 CORS 政策,基本上允许所有来源。
services.AddCors(o =>
{
o.AddDefaultPolicy(p =>
{
p.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});
这里的挑战是 web socket/signalR 连接强制要求只允许特定来源而不是全部。如果我这样做,这会起作用。
services.AddCors(o =>
{
o.AddDefaultPolicy(p =>
{
p.WithOrigins("http://localhost:4200")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
});
});
但我不想让它成为默认策略。我只想要仅用于 signalR 的附加策略,我可以完成类似的代码来实现单独的策略。
services.AddCors(o =>
{
o.AddDefaultPolicy(p =>
{
p.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
o.AddPolicy("customPolicy",p =>
{
p.WithOrigins("http://localhost:4200")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
});
});
这添加了一个默认策略和一个命名策略,但我如何告诉我的 websocket/signalR 连接使用命名策略而不是默认策略?
这是我的配置方法。
public async void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
app.UseCors();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseAuthentication();
app.UseWebSockets();
await app.UseOcelot().ConfigureAwait(false);
}
因此,我需要建议将此自定义策略仅与 Web 套接字连接相关联。 简而言之,以下是我的要求。
SignalR => 命名策略(允许特定来源)
Http => 默认策略(允许所有来源)
要求只为特定域启用 Web 套接字,而 Http 可以对所有域开放。所以我正在寻找实现这一要求的建议。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)