将 Context.UserIdentifier 设置为不同的声明

Set Context.UserIdentifier to different claim

默认情况下,signalr 在 jwt 令牌中从 ClaimTypes.NameIdentifier 设置 Context.UserIdentifier。 但是我想将它设置为与令牌不同的声明,令牌是 userId 而不是用户名,因为当我向特定用户发送消息时我有他的 ID 可用。 有办法吗?

实施IUserIdProvider并注册。

public class CustomUserIdProvider : IUserIdProvider
{
    public virtual string GetUserId(HubConnectionContext connection)
    {
        return connection.User?.FindFirst(yourClaimTypeHere)?.Value;
    }
}

services.AddSingleton<IUserIdProvider, CustomUserIdProvider>();