我在 docker 容器中构建了一个小微服务,它基本上只是一个 API 可以连接到的集线器,以将通知推送到 blazor 客户端。因为它是一个微服务,它在自己的进程中运行,并且不知道 UI 和 API 中的身份验证(身份验证使用 JWT 令牌)。这是我的 OnConnectedAsync 方法:
private readonly static ConcurrentDictionary<string, string> _connectionMap = new();
public override Task OnConnectedAsync()
{
var connectionId = Context.ConnectionId;
var userName = Context.User?.Identity?.Name;
_connectionMap.TryAdd(connectionId, userName);
return base.OnConnectedAsync();
}
不出所料,Context.User 中的所有内容大部分都是空的,因为它自己运行并且不知道其他项目中正在进行的所有身份验证。我没有看到可以用来以某种方式将用户 ID 传递到我的集线器的覆盖。我需要能够将 connectionID 与用户名相关联,以便只有该用户可以接收通知,现在每个客户端都会收到每个通知。
如何将某种用户标识传递给我的 SignalR 微服务?