从 SignalR 请求中检索持有者 jwt 令牌

Retrieve bearer jwt token from SignalR request

我需要从 SignalR 请求中检索 jwt 令牌。我需要这个不是为了验证(这工作正常),而是为了令牌上的进一步任务。理想情况下,如果我可以在集线器级别检索它。

我的中心class

    [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();
        }
    }

这应该可行,您可以在集线器方法中完成:

    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 中使用扩展方法 Get HttpContext() 完成,希望您也会在 Core 中。