Я использую токены проверки подлинности JWT в приложении ASP.NET Core Web API. Токены генерируются самим API, а не третьей стороной. Я успешно добавил SignalR в стек, но теперь мне нужно проверить подлинность пользователей, которые пытаются выполнить серверные (Hub) методы. Кто-то предложил передать токен в свойстве "qs" в JavaScript. Это будет не работать для меня, так как наши токены действительно большие (они содержат много претензий). Я попытался написать специальное промежуточное программное обеспечение для чтения токена из полезной нагрузки и автоматической аутентификации пользователя. Проблема в том, что при использовании WebSockets промежуточное ПО не выполняется. Любые идеи помогут.
Проверка подлинности JWT в SignalR (.NET Core) без передачи токена в строке запроса
Ответ 1
Посмотрите на статью, в которой предлагается использовать строку запроса Проверить подлинность приложения ASP.NET Core 1.0 (vNext) SignalR с использованием JWT. Я знаю, что ваш токен слишком длинный, но автор объясняет, как использовать промежуточное программное обеспечение для аутентификации запроса.
Вот резюме из статьи:
- SignalR не имеет встроенного специального механизма аутентификации, он использует стандартную аутентификацию ASP.NET.
- JWT обычно отправляется в заголовке авторизации запроса
- Клиентская библиотека SignalR JavaScript не включает средства отправки заголовков в запросах, однако она позволяет передавать строку запроса
- Если мы передадим токен в строке запроса, мы можем написать промежуточное программное обеспечение, которое добавляет заголовок авторизации с токеном в качестве значения. Это должно быть сделано до промежуточного программного обеспечения Jwt в конвейере
- Имейте в виду формат "Носитель"
Я выделил ключевой момент, когда ваше промежуточное программное обеспечение должно быть зарегистрировано до промежуточного программного обеспечения Jwt.