如何在SignalR中为某些但不是所有集线器设置Integrated Windows Authentication

问题描述

我需要对集​​线器使用Windows身份验证,但是由于Im在更大的系统中工作,所以我只能通过GlobalHost访问SignalR管道。

我曾经尝试使用AuthorizedAttribute,但是由于没有注册自动模块,因此没有设置身份。

我尝试设置GlobalHost.HubPipeline.RequireAuthentication();

这设置了身份,但是由于它设置了全局授权,因此其他集线器无法连接。

最后,我尝试添加一个自定义授权模块,该模块仅适用于我想要的一个集线器。 但是,一旦我对一个集线器做出例外处理,就不会再设置身份,并且会收到来自授权集线器的未经授权的响应。

解决方法

我通常将身份验证属性放在集线器类的顶部。

 [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
 public class myChat : Hub 
 {
 }

这是基于令牌的身份验证,您需要配置从客户端发送身份验证令牌。 https://docs.microsoft.com/en-us/aspnet/core/signalr/authn-and-authz?view=aspnetcore-3.1