Я использую токены аутентификации JWT в приложении ASP.NET Core Web API. Токены генерируются самим API, а не третьей стороной. Я успешно добавил SignalR в стек, но теперь мне нужно проверить подлинность пользователей, которые пытаются выполнить серверные (Hub) методы. Кто-то предложил передать токен в свойстве «qs» в JavaScript. Это будет не работает для меня, так как наши жетоны действительно большие (в них много претензий). Я попытался написать специальное промежуточное программное обеспечение для чтения токена из полезной нагрузки и автоматической аутентификации пользователя. Проблема в том, что при использовании WebSockets промежуточное ПО не выполняется. Любые идеи помогут.Проверка подлинности JWT в SignalR (.NET Core) без передачи токена в строке запроса
ответ
Обратите внимание на статью, в которой предлагается использовать строку запроса Authenticate against a ASP.NET Core 1.0 (vNext) SignalR application using JWT. Я знаю, что токен слишком длинный, но автор объясняет, как использовать промежуточное программное обеспечение для аутентификации запроса.
Вот резюме из статьи:
- SignalR не имеет какого-либо специального механизма аутентификации встроенная, она использует стандартную проверку подлинности ASP.NET.
- JWT, как правило, передается в авторизации заголовка запроса
- Клиентская библиотека SignalR JavaScript не включает в себя средство для отправки заголовков в запросах, она тем не менее позволяет передать строку запроса
- Если мы переходим токен в строке запроса мы можем написать промежуточное программное обеспечение, которое добавляет заголовок авторизации с токеном в качестве значения. Это должно быть сделано до промежуточного JWT в трубопроводе
- знать о формате «однонаправленного канала»
Я выделил ключевой момент, что пользовательское ПО промежуточного слоя должны быть зарегистрированы до JWT ППО.
Простой контент есть, просто qs слишком длинный –
Я понимаю, что вы долгое время. Можете ли вы вставить токен в полезную нагрузку и использовать промежуточное программное обеспечение для его декодирования, зарегистрировав его раньше? –
Хорошо, я думаю, что у вас может не быть доступа к полезной нагрузке в промежуточном программном обеспечении до SignalR. В этом случае вы можете реализовать пользовательский парсер для токена в коде приложения, когда будете читать полезную нагрузку. Вы не сможете использовать атрибут Authorize, но вы сможете проверить требования пользователя и все такое. –
Возможный дубликат [SignalR и OpenId Connect] (http://stackoverflow.com/questions/40806171/signalr-and-openid-connect) –
Это не дубликат, поскольку я не могу использовать строку запроса в все мои токены слишком длинны, и я получаю ошибку 414. Я хочу создать что-то вроде специального промежуточного программного обеспечения, которое извлекает токен из сообщения SignalR, а затем регистрирует пользователя. –
К сожалению, есть только два способа передачи токена: либо строка запроса, либо как параметр. Надеемся, что это будет рассмотрено в следующей версии SignalR. – mikebridge