客户何时适合与 SignalR 服务重新协商?

Posted

技术标签:

【中文标题】客户何时适合与 SignalR 服务重新协商?【英文标题】:When is it appropriate for the client to re-negotiate with SignalR Service? 【发布时间】:2020-02-01 15:42:32 【问题描述】:

我正在尝试了解SignalR Servicenegotiate 步骤返回的访问令牌。

[FunctionName("negotiate")]
public static SignalRConnectionInfo Negotiate(
    [HttpTrigger(AuthorizationLevel.Anonymous)]HttpRequest req,
    [SignalRConnectionInfo(HubName = "chat")]SignalRConnectionInfo connectionInfo)

    return connectionInfo;

默认情况下SignalRConnectionInfo返回的token的有效期是多久? 有没有办法手动配置令牌寿命? 如果令牌不再有效,Microsoft.AspNetCore.SignalR.Client.HubConnection 对象(尤其是其State 属性)会发生什么情况?会设置为Disconnected吗?

基本上,我正在尝试确定何时应该重新协商以保持连接打开。如果令牌过期,客户端如何知道需要再协商一次才能发送和接收实时消息?

【问题讨论】:

【参考方案1】:

    深入了解Azure SignalR SDK code,默认访问令牌生命周期似乎是 1 小时。

    而SDK seems to support customizing the lifetime,服务binding doesn't seem expose it。

    对于 3,不要认为你真的需要它,但你可以 raise on issue on its repo 或贡献 PR 来支持它。

    @microsoft/signalr 包中,您可以使用enable automatic reconnect 或manually reconnect。我相信图书馆会在内部自行处理协商电话。

【讨论】:

【参考方案2】:

在 Microsoft 文档的身份验证和授权部分中说:

您提供的访问令牌函数在 SignalR 发出的每个 HTTP 请求之前调用。如果您需要更新令牌以保持连接处于活动状态(因为它可能在连接期间过期),请在此函数中执行此操作并返回更新后的令牌。

因此,您需要在首次启动连接时发送“刷新”令牌。在应用程序上下文中,当您的令牌过期时,它应该将用户重定向到身份服务器以刷新令牌,然后重新开始新的连接。

在我们公司,我们使用应用程序令牌与中心建立持久连接,因此当它到期时,它会强制刷新令牌,这将触发使用新令牌与中心的新连接。

【讨论】:

以上是关于客户何时适合与 SignalR 服务重新协商?的主要内容,如果未能解决你的问题,请参考以下文章

如何确定与 SignalR 客户端的服务器断开连接?

Signalr 协商 url 失败

协商后跨源 SignalR 连接停止

SingnalR 开发到生产部署闭坑指南

检测来自客户端的SignalR中丢失的连接

无需 ssl 重新协商的 ssl 客户端身份验证