SignalR Core默认为所有中心授权

3

我正在开发ASP.Net Core 2.2 Web服务+SignarR Core,并配备JWT身份验证。我希望确保只有在拥有有效令牌的情况下才能访问所有我的hubs。

我可以在所有hubs上设置[Authorize]属性以确保这一点,但是是否有可能默认要求授权(否则在将来实现新的hub时可能会忘记它)。

就像我可以为控制器做到这一点:

services.AddMvc(config =>
                        {
                            var policy = new AuthorizationPolicyBuilder()
                                         .RequireAuthenticatedUser()
                                         .Build();
                            config.Filters.Add(new AuthorizeFilter(policy));
                        })
2个回答

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
{

} 

0

您可以通过向路由添加授权数据来实现。

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

这对我来说没有起作用 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接