从SignalR请求检索承载jwt令牌

时间:2019-10-25 08:51:28

标签: c# jwt signalr

我需要从SignalR请求中检索jwt令牌。我不需要进行身份验证(此方法工作正常),但需要进行令牌上的其他任务。理想情况是,如果可以在集线器级别上检索它。

我的Hub类

    [Authorize(AuthenticationSchemes = "Bearer")]
    public class MyHub : Hub
    {
        private readonly IMyService _myService;

        public myHub(IMyService myService)
        {
            _myService = myService;
        }

        public async Task GetSomething()
        {
            await Clients.Caller.SendAsync("GetSomething", await _myService.GetSome();
        }
    }

1 个答案:

答案 0 :(得分:1)

这应该可以工作,您可以使用集线器方法:

    var httpContext = Context.GetHttpContext();
    if (httpContext.Request.Headers.TryGetValue("Authorization", out var authorizationValues))
        {
            var tokenWithBearer = authorizationValues.FirstOrDefault(s => s.Contains("Bearer", StringComparison.InvariantCultureIgnoreCase));
            if (tokenWithBearer != null)
            {
                // now trunc it at left to remove "Bearer " and get your token
            }
        }

使用Microsoft.AspNetCore.SignalR中的扩展方法GetHttpContext()完成,希望您也将位于Core中。