Извлечь токен-носитель jwt из запроса SignalR - PullRequest
2 голосов
/ 25 октября 2019

Мне нужно получить токен jwt из запроса SignalR. Мне нужно это не для autotheate (это прекрасно работает), а для дальнейших задач на токене. В идеале будет, если я смогу получить его на уровне Hub.

Мой класс 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 Ответ

1 голос
/ 01 ноября 2019

Это должно работать, вы можете сделать это в методе-концентраторе:

    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
            }
        }

Завершено с использованием метода расширения GetHttpContext () в Microsoft.AspNetCore.SignalR, надеясь, что вы также будете в Core.

...