【问题标题】:ASP.Net Core SignalR bearer token on negotiateASP.Net Core SignalR 不记名令牌协商
【发布时间】:2020-02-28 04:28:20
【问题描述】:

通过阅读使用 SignalR 进行身份验证的 Microsoft docs,看来使用不记名令牌进行身份验证的唯一方法是将其发送到 WebSocket 连接上的查询字符串中。

在检查 SignalR 握手时,似乎授权标头包含在协商调用中。由于在协商响应中返回了连接 ID,因此服务器可以跟踪该连接 ID 是否已通过身份验证。

为什么还需要将不记名令牌添加到 Websocket 连接查询字符串?

【问题讨论】:

    标签: asp.net-core signalr asp.net-core-signalr


    【解决方案1】:

    这似乎是你问题的线索。

    当使用 WebSockets 或服务器发送事件时,浏览器客户端在查询字符串中发送访问令牌。通过查询字符串接收访问令牌通常是安全的,因为使用标准授权标头。始终使用 HTTPS 来确保客户端和服务器之间的安全端到端连接。

    Security considerations in ASP.NET Core SignalR

    这是另一种选择:

    SignalR 可以与 ASP.NET Core 身份验证一起使用,以将用户与每个连接相关联。在集线器中,可以从 HubConnectionContext.User 属性访问身份验证数据。身份验证允许集线器在与用户关联的所有连接上调用方法。有关详细信息,请参阅在 SignalR 中管理用户和组。多个连接可能与单个用户相关联。

    Authenticate users connecting to a SignalR hub

    补充: 但是,我认为您也可以尝试对服务器和客户端进行一些注入。在服务器上,例如。使用 websocket 助手和客户端,例如。使用 Promise 与 XMLHttpRequest。

    【讨论】:

    • 这仍然没有解释为什么如果服务器已经可以从协商的连接 id 跟踪它,为什么有必要将令牌添加到查询字符串中。
    • 与 sessionid 类似,但在 sessionless 情况方法的实现上有所不同。
    猜你喜欢
    • 2016-09-25
    • 2020-07-09
    • 2022-11-26
    • 2020-11-20
    • 2021-10-05
    • 2020-11-16
    • 2018-07-21
    • 2017-10-26
    • 1970-01-01
    相关资源
    最近更新 更多