客户何时适合与 SignalR 服务重新协商?
Posted
技术标签:
【中文标题】客户何时适合与 SignalR 服务重新协商?【英文标题】:When is it appropriate for the client to re-negotiate with SignalR Service? 【发布时间】:2020-02-01 15:42:32 【问题描述】:我正在尝试了解SignalR Service
的negotiate
步骤返回的访问令牌。
[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 服务重新协商?的主要内容,如果未能解决你的问题,请参考以下文章