【问题标题】:Authorization for all hubs by default in SignalR CoreSignalR Core 中默认授权所有集线器
【发布时间】:2019-08-10 22:55:24
【问题描述】:

我正在开发带有 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:配置中间件在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
    {
    
    } 
    

    【讨论】:

      【解决方案2】:

      您可以通过向路由添加授权数据来做到这一点。

      app.UseSignalR(routes =>
      {
         routes.MapHub<BackgroundServiceHub>("/hubs", o =>
         {
            o.AuthorizationData.Add(new AuthorizeAttribute());
         });
      });
      

      【讨论】:

      • 这对我不起作用
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多