reactjs - React SignalR - 不要在 URL 中发送不记名令牌
问题描述
我正在编写一个应用程序,该应用程序刚刚通过以下渗透测试:
授权令牌正在 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 中的不记名令牌的情况下连接和发送请求?
解决方案
从文档
当使用 WebSockets 或服务器发送事件时,浏览器客户端在查询字符串中发送访问令牌。通过查询字符串接收访问令牌通常是安全的,因为使用标准授权标头。始终使用 HTTPS 来确保客户端和服务器之间的安全端到端连接。许多 Web 服务器记录每个请求的 URL,包括查询字符串。记录 URL 可能会记录访问令牌。默认情况下,ASP.NET Core 记录每个请求的 URL,其中将包括查询字符串。例如:
从这个文档
在标准 Web API 中,不记名令牌在 HTTP 标头中发送。但是,在使用某些传输时,SignalR 无法在浏览器中设置这些标头。使用 WebSockets 和服务器发送事件时,令牌作为查询字符串参数传输。
在我看来,您可以禁用 WebSockets 和 Server-Sent 事件。请参阅此问题,了解如何删除 WebSockets 或 Server-Sent 事件。但是然后你回退到长轮询或永远框架,你可能不想要那样。
由于您问题中的 URL 是 https,因此如果您禁用了请求日志记录,我不会那么麻烦。
更改日志级别Microsoft.AspNetCore.Hosting
可以在您的appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore.Hosting": "Warning"
}
}
}
推荐阅读
- javascript - Javascript - 如何使用正则表达式提取文本
- flutter - 未处理的异常:在 null 上调用了 getter 'name'
- javascript - 有没有办法使用 cypress/JS 以编程方式通过 Keycloak 登录应用程序?
- javascript - 使脚本仅适用于特定的屏幕尺寸
- python - 有没有办法将列表返回为句子格式python
- javascript - 当我在字段集中取消隐藏和重新隐藏图例标签时出现问题
- php - MySQL 和 PHP - 在一列中按多个条件进行过滤
- python - 代码:Python,错误类型:“int”对象不可下标
- c# - 将此作为继承类型返回
- html - HTML CSS 导航栏问题