c# - SignalR Core 中默认对所有集线器进行授权
问题描述
我正在使用 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
{
}
推荐阅读
- javascript - 异步回调返回数组代替对象
- delphi - 在 GrayScale 中绘制来自 TPngImageList 的位图图像
- google-sheets - 用于在最接近零的单元格区域中查找值的公式,其中这些单元格包含字母
- origen-sdk - Origen 编译器可以在串联模式下运行吗?
- javascript - Angular 2中具有动态字段的NgModel
- visual-studio - 您可以向(TFS)源代码管理资源管理器添加过滤器(基于标签)吗?
- python - Pandas install-导入多数组numpy扩展
- github-api - 从 Github 企业 API 获取日期范围内的问题
- javascript - 在 span 元素中转换 textNode 的子字符串
- java - 将 cURL 转换为 Java 以进行 SOAP 调用