如何解决使用 Ocelot 为 Web 套接字连接设置 CORS 策略
我在 .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 可以对所有域开放。所以我正在寻找实现这一要求的建议。
解决方法
尝试仅使用命名策略而不是默认策略。有时它适用于两种情况:
services.AddCors(o => o.AddPolicy("AllowAnyOrigins",builder =>
{
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
}));
......
......
app.UseCors("AllowAnyOrigins");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。