繁体   English   中英

反应 SignalR - 不要在 URL 中发送不记名令牌

[英]React SignalR - Do not send bearer token in URL

我正在编写一个应用程序,该应用程序刚刚通过以下渗透测试:

授权令牌正在 URL 中发送:

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

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

    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 中的不记名令牌的情况下连接和发送请求?

文档

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

从这个文档

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

在我看来,您可以禁用 WebSockets 和 Server-Sent 事件。 请参阅此问题,了解如何删除 WebSockets 或 Server-Sent 事件。 但是然后你回退到长轮询或永远框架,你可能不想要那样。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM