在SignalR Core中默认授权所有集线器

问题描述 投票:1回答:1

我正在使用JWT身份验证处理ASP.Net Core 2.2 Web Service + SignarR Core,并希望确保只使用有效令牌访问我的所有集线器。

我可以在所有集线器上设置[Authorize]属性以确保这一点,但是默认情况下是否可以要求授权(否则在将来实施新集线器时会忘记它)。

就像我可以为控制器做的那样:

services.AddMvc(config =>
                        {
                            var policy = new AuthorizationPolicyBuilder()
                                         .RequireAuthenticatedUser()
                                         .Build();
                            config.Filters.Add(new AuthorizeFilter(policy));
                        })
c# asp.net-core asp.net-core-signalr
1个回答
1
投票

要对授权用户进行全局检查,您可以尝试

选项1:配置中间件以在signalR之前进行授权

app.Use(async (context, next) =>
    {
        if (context.User.Identity.IsAuthenticated)
        {
            await next.Invoke();
        }
        else
        {
            context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
        }
    });
app.UseSignalR(routes =>
{
    routes.MapHub<ChatHub>("/hubs/chat");
});  

选项2:实现基础集线器以及从此基础集线器继承的其他集线器

[Authorize]
public class AuthorizeHub:Hub
{

}
public class OtherHub: AuthorizeHub
{

} 
© www.soinside.com 2019 - 2024. All rights reserved.