gpt4 book ai didi

azure - SignalR 协商预检请求失败

转载 作者:行者123 更新时间:2023-12-02 07:22:59 25 4
gpt4 key购买 nike

我有一种情况,我的 SignalR 服务器和客户端无法在同一源中运行,因为我们希望为多个源共享 SignalR 服务器。当我在本地运行服务器并启动在 typescript 中运行的基于网络的 signalR 客户端实例时,我可以连接并且一切正常。当我将服务器移至 Azure 并使用相同的本地运行的 signalR 客户端连接到服务器时,我收到预检请求未通过访问控制检查。 Azure 应用服务中没有 COR 设置。所有 Cors 设置都在服务器代码中完成。代码如下。

我在浏览器中遇到的错误是:从来源“https://localhost:44392”访问“https://******.azurewebsites.net/chatHub/negotiate?negotiateVersion=1”处的 XMLHttpRequest ' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:预检请求不允许重定向。这在本地按预期工作,但在 Azure 中运行并从本地客户端连接时最终无法正常工作。

重现

public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options => options.AddPolicy("MyCorsPolicy", builder =>
{
builder
.AllowAnyHeader()
.WithOrigins("https://localhost:44392/")
.SetIsOriginAllowed(origin =>
{
if (string.IsNullOrWhiteSpace(origin))
return false;

if (origin.ToLower().StartsWith("https://localhost"))
return true;
return false;
})
.AllowAnyMethod()
.AllowCredentials();
}));
... //Authentication etc
services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
}).AddJsonProtocol();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseCors("MyCorsPolicy");
app.UseAuthentication();
app.UseAuthorization();
app.UseHttpsRedirection();

app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Ping!");
});
endpoints.MapHub<ChatHub>("/chatHub");
});
}

在 typescript 客户端中,我发出如下请求:

const connection = new HubConnectionBuilder()
.withUrl("https://******.azurewebsites.net/chatHub" , { accessTokenFactory: () => "TOKEN GOES HERE"})
.configureLogging(LogLevel.Information)
.build();

更多技术细节

  • ASP.NET Core 版本 - 3.1,SignalR 版本 - @microsoft/signalR - 3.1.3
  • 您正在运行的 IDE(VS/VS Code/VS4Mac)及其版本 - Azure 中的本地 Visual Studio 2019 - Azure 应用服务。

最佳答案

将此问题标记为已关闭。这很棘手,因为它在本地工作,但在 Azure 中不起作用。在查看应用程序日志和网络跟踪后,@BrennanConroy 注意到与身份验证相关的某些内容导致了重定向。我在 Azure 中设置了身份验证,由于这是运行的第一件事,因此应用程序内的 CORS 没有机会运行。处理此问题的方法是在 Azure 中使用 CORS,但根据文档,SignalR 不支持应用服务中的 CORS,应注意 Azure 应用服务中的身份验证将导致 CORS 问题。

关于azure - SignalR 协商预检请求失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61376802/

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