【问题标题】:SignalR Core JS Client not passing Authorisation headrs on "Upgrade " RequestSignalR Core JS 客户端未在“升级”请求中传递授权标头
【发布时间】:2019-03-07 19:28:44
【问题描述】:

我必须使用 ASP .Net Core 实现推送通知服务。显而易见的选择是使用 SignalR Core。

我们的平台设置使用 Azure App 网关,并且配置为不允许未经身份验证的请求。

我们已经设置了与 SignalR 的 WebSockets 通信。

在后台,SignalR Core 遵循以下步骤:

  1. POS ../negociate -> 可以使用 hub_token 并支持传输
  2. GET(发送升级标头和 WebSockets 令牌)../Hub?id={hub_token} -?失败

在调查为什么第 2 步没有将连接升级到 WebSocket 连接时,我注意到 GET 请求缺少授权标头。显然 AG 阻止了这个请求,甚至没有访问 API。

我尝试手动与邮递员“握手”。 以上步骤:

  1. 好的
  2. 包含 Authorization JWT 标头 -> 结果 101,Fiddler 确认连接已打开。

我研究了文档,发现不支持授权标头。

有没有人尝试过任何解决方法? @aspnet/signalr 客户端的下一个版本是什么?

【问题讨论】:

    标签: asp.net-core signalr


    【解决方案1】:

    所以最终的解决方案是: 这在浏览器中是发送 JWT 标头和 HTTP 101 UPGRADE 的限制

    【讨论】:

      【解决方案2】:

      您是否指定了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();
      

      更多信息here。

      【讨论】:

      • 这正是不起作用的部分。 JWT 令牌将作为查询字符串发送,而不是作为标头的一部分。应该是这样。您的示例是这样做的:../Hub?id=5u4uNZpKFNpEWyS5ioVhFg&access_token={jwt token} .. 虽然 JWT 令牌应该在授权中:bearer {jwt token} -
      • SignalR 如您所说:查询字符串中的令牌。您有责任从查询字符串参数中获取它,然后在您的授权堆栈中验证令牌
      • 我在原帖中已经说明 Azure AppGateway 会阻止该请求。因此,请求不会到达 API 本身。 .所以在“授权”中间件中没有什么可处理的
      猜你喜欢
      • 2015-05-17
      • 1970-01-01
      • 2020-05-10
      • 2015-02-01
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      相关资源
      最近更新 更多