如何在SignalR Hub Web API .NET Core中从用户处获得索赔

时间:2019-04-29 14:51:03

标签: angular asp.net-core signalr token

我想将聊天实时功能添加到我的Web项目中。我正在使用asp.net SignalR 2.4来实现该功能。但是我很难从集线器类的承载令牌中获取UserId。

我使用角度7从客户端提供令牌,并且可以通过集线器类中的查询字符串获取该令牌。

我可以使用以下方法轻松地在我的一个控制器中获取UserId:

var userId = User.Claims.First(c => c.Type == "UserID").Value;

但是在中心类中,User始终为null 我的中心类的代码:

public override Task OnConnectedAsync()
{
    var identity = (ClaimsIdentity)Context.User.Identity;
    var connectionId = Context.ConnectionId;
    var query = Context.GetHttpContext().Request.Query;
    var token = query["access_token"].ToString();
    return base.OnConnectedAsync();
}

使用角度7的客户端代码:

ngOnInit(): void {
    this.hubConnection = new signalR.HubConnectionBuilder()
      .withUrl('http://localhost:50792/chat',{
        accessTokenFactory: () => {
          return this.token;
        },
      } as signalR.IHttpConnectionOptions)
      .build();
    // this.hubConnection.Headers.Add("Authorization", "Bearer " +
this.token);
    this.hubConnection
      .start()
      .then(() => console.log('Connection started'))
}

0 个答案:

没有答案