Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core SignalR Core JS客户端未通过“上的授权头”;“升级”;要求_Asp.net Core_Signalr - Fatal编程技术网

Asp.net core SignalR Core JS客户端未通过“上的授权头”;“升级”;要求

Asp.net core SignalR Core JS客户端未通过“上的授权头”;“升级”;要求,asp.net-core,signalr,Asp.net Core,Signalr,我必须使用ASP.NETCore实现推送通知服务。显而易见的选择是使用信号机核心 我们的平台设置正在使用Azure App gateway,它被配置为不允许未经验证的请求 我们已设置与信号机的WebSocket通信 在发动机罩下,信号机核心遵循以下步骤: POS../negociate->OK(使用集线器令牌和支持的传输) GET(发送升级头和WebSockets令牌)…/Hub?id={Hub_令牌}-?失败 在调查步骤2没有将连接升级到WebSocket连接的原因时,我注意到GET请求缺少授

我必须使用ASP.NETCore实现推送通知服务。显而易见的选择是使用信号机核心

我们的平台设置正在使用Azure App gateway,它被配置为不允许未经验证的请求

我们已设置与信号机的WebSocket通信

在发动机罩下,信号机核心遵循以下步骤:

  • POS../negociate->OK(使用集线器令牌和支持的传输)
  • GET(发送升级头和WebSockets令牌)…/Hub?id={Hub_令牌}-?失败
  • 在调查步骤2没有将连接升级到WebSocket连接的原因时,我注意到GET请求缺少授权头。显然,AG会阻止这个请求,甚至无法访问API

    我试着用手和邮递员“握手”。 上述步骤包括:

  • 包括授权JWT头->结果101,Fiddler确认连接已打开 我研究了文档,发现不支持授权头


    有人试过解决办法吗?@aspnet/signar客户端的下一个版本是什么

    您是否指定了
    accessTokenFactory

    let connection = new signalR.HubConnectionBuilder()
    .withUrl("/myhub", {
        accessTokenFactory: () => {
            // Get and return the access token.
            // This function can return a JavaScript Promise if asynchronous
            // logic is required to retrieve the access token.
        }
    })
    .build();
    

    更多信息。

    因此最终解决方案是:
    在浏览器中,随着HTTP 101升级一起发送JWT头是一个限制

    这正是不起作用的部分。JWT令牌将作为查询字符串发送,而不是作为标头的一部分发送。应该如此。您的示例是这样做的:../Hub?id=5u4uNZpKFNpEWyS5ioVhFg&access_-token={jwt-token}。。虽然JWT令牌应该在Authorization:bearer{JWT token}中,但signer的工作原理与您所说的一样:查询字符串中的令牌。您有责任从查询字符串参数中获取这些信息,然后验证您的授权堆栈中的令牌。我在原始帖子中说过,Azure AppGateway会阻止请求。因此,请求不会到达API本身。所以在“授权”中间件中没有什么需要处理的