ASP.NET Core 2.0 Signalr 将数据从授权要求传递到集线器

ASP.NET Core 2.0 Signalr pass data from authorization requirement to hub

我有一个授权要求,确保 http header 中的访问令牌有效:

class AccessTokenRequirement : AuthorizationHandler<AccessTokenRequirement>, IAuthorizationRequirement 
{
     protected async override Task HandleRequirementAsync(AuthorizationHandlerContext context, AccessTokenRequirement requirement)
     {
         //...
     }
}

我将此要求添加到 startup.cs class 中的 mvc 管道,如下所示:

services.AddAuthorization(options =>
{
    options.AddPolicy("AccessToken", policy => policy.Requirements.Add(
       services.BuildServiceProvider().GetRequiredService<AccessTokenRequirement>()));
});

然后我在信号集线器上使用此要求,如下所示:

[Authorize(Policy = "AccessToken")]
public class MyHub : Hub

在授权要求中,我检查令牌并通过访问数据库来识别用户。我的问题是如何访问集线器方法内的用户详细信息?将信息从授权要求内部传递到我的集线器方法的优雅方式是什么? 我已经阅读了 asp.net 中的身份概念,但发现它很难理解。 提前致谢。

您可以通过 Context.User.

访问中心内的 ClaimsPrincipal

这是您想要的信息,还是您想在您的 Hub 中访问其他内容?