我正在使用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));
})
要对授权用户进行全局检查,您可以尝试
选项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
{
}