【问题标题】:React SignalR - Do not send bearer token in URLReact SignalR - 不要在 URL 中发送不记名令牌
【发布时间】:2020-07-23 18:44:06
【问题描述】:

我正在编写一个应用程序,它刚刚未能通过以下方面的渗透测试:

授权令牌正在 URL 中发送:

 https://domain/Hub?access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imh1Tjk1SXZQZmVocTM0R3pCRFoxR1hHaXJuTSIsImtpZCI6Imh1Tjk1SXZQZmVocTM0R3pCRFoxR1hHaXJuTSJ9.....

这会在发送到使用 Azure AD 授权的 Hub 时自动发生。

    constructor (hub: string) {
    this.hubName = hub;
    this.hub = new HubConnectionBuilder()
        .configureLogging(LogLevel.Critical)
        .withUrl(`${this.hubURL}${hub}` , {
            skipNegotiation: true,
            transport: HttpTransportType.WebSockets,
            accessTokenFactory: () => {
                return `${getToken()}`
            }
        })
        .build();
}

我已经搜索了文档,但是我想知道是否有一种方法可以在不暴露 URL 中的不记名令牌的情况下连接和发送请​​求?

【问题讨论】:

    标签: reactjs .net-core signalr


    【解决方案1】:

    来自documentation

    当使用 WebSockets 或服务器发送事件时,浏览器客户端发送 查询字符串中的访问令牌。通过接收访问令牌 查询字符串通常是安全的,因为使用标准授权 标题。始终使用 HTTPS 来确保安全的端到端连接 客户端和服务器之间。许多 Web 服务器记录 URL 每个请求,包括查询字符串。记录 URL 可能会记录 访问令牌。 ASP.NET Core 默认记录每个请求的 URL, 这将包括查询字符串。例如:

    从这个documentation

    在标准 Web API 中,不记名令牌在 HTTP 标头中发送。 但是,SignalR 在使用时无法在浏览器中设置这些标头 一些交通工具。使用 WebSockets 和服务器发送事件时, 令牌作为查询字符串参数传输。

    在我看来,您可以禁用 WebSockets 和 Server-Sent 事件。请参阅this question,了解如何删除 WebSocket 或服务器发送事件。但随后您回退到长轮询或永久帧,您可能不希望这样。

    由于您问题中的 URL 是 https,如果您禁用了请求日志记录,我就不会那么麻烦了。

    更改Microsoft.AspNetCore.Hosting 的日志级别可以在您的appsettings.json 中完成

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore.Hosting": "Warning"
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-20
      • 2021-08-05
      • 1970-01-01
      • 2021-06-06
      • 2020-02-21
      • 1970-01-01
      • 2021-10-24
      • 2020-11-20
      相关资源
      最近更新 更多