我正在使用具有JWT身份验证的ASP.Net Core 2.2 Web服务+ SignarR Core,希望确保仅使用有效令牌才能访问我的所有集线器。
我可以在所有集线器上设置[Authorize]属性以确保这一点,但是默认情况下可以要求授权(否则将来在实现新集线器时可能会忘记它)。
就像我可以为控制器做的一样:
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
})
答案 0 :(得分:1)
要全局检查授权用户,可以尝试
Options1:将中间件配置为在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
{
}
答案 1 :(得分:0)
您可以通过向路由添加授权数据来实现。
app.UseSignalR(routes =>
{
routes.MapHub<BackgroundServiceHub>("/hubs", o =>
{
o.AuthorizationData.Add(new AuthorizeAttribute());
});
});