我在具有授权属性的 SignalR 集线器上收到 CORS 错误

问题描述 投票:0回答:1

我有一个带有 signalR 的集线器,我想使用 [Authorize] 属性来保护它。中心可以从 JWT 令牌获取用户,并在令牌无效时给我 401,所以一切似乎都正常。但是当我将其发布到开发环境并且前端客户端连接到集线器时,它会出现 CORS 错误。

我在本地有一个测试客户端,我用它来连接到本地主机,甚至连接到开发环境的中心。从该测试客户端来看,一切正常,但从开发环境的前端来看则不然。

如果我删除 [Authorize] 属性,一切都会再次正常工作。没有 cors 错误,仍然可以从令牌中获取用户,但集线器实际上并未受到保护。

所以我认为必须有一些我错过的额外配置。

我尝试了不同的 cors 策略配置,但没有一个改变任何内容。 我还尝试将 cors 策略手动添加到集线器:

app.MapHub<TestHub>("/hubs/test")
                .RequireCors("CorsPolicy")
c# asp.net-core cors signalr
1个回答
0
投票

我将日志设置为详细并在日志中收到消息:不支持 OPTIONS 请求。

我添加了这篇文章中的中间件(已接受的答案):

在 .NET Core Web API 上启用 CORS 的 OPTIONS 标头

因为我使用的是 Authorization 标头,所以 OptionsMiddleware 中 BeginInvoke 方法中 if 的完整代码块如下所示:

if (context.Request.Method == "OPTIONS")
    {
        context.Response.Headers.Add("Access-Control-Allow-Origin", new[] { (string)context.Request.Headers["Origin"] });
        context.Response.Headers.Add("Access-Control-Allow-Headers", new[] { "Origin, X-Requested-With, Content-Type, Accept, Authorization, x-signalr-user-agent" });
        context.Response.Headers.Add("Access-Control-Allow-Methods", new[] { "GET, POST, PUT, DELETE, OPTIONS" });
        context.Response.Headers.Add("Access-Control-Allow-Credentials", new[] { "true" });
        context.Response.StatusCode = 200;
        return context.Response.WriteAsync("OK");
    }

希望它有帮助,因为我在这个问题上被困了将近两天。

© www.soinside.com 2019 - 2024. All rights reserved.