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

时间:2018-01-12 08:34:58

标签: asp.net-core-2.0 asp.net-core-signalr

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

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

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

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

然后我在我的信号器集线器上使用这个要求,如下:

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

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

1 个答案:

答案 0 :(得分:2)

您可以通过ClaimsPrincipal访问集线器内的Context.User

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