2016-12-16 3 views
13

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

+0

Возможный дубликат [SignalR и OpenId Connect] (http://stackoverflow.com/questions/40806171/signalr-and-openid-connect) –

+2

Это не дубликат, поскольку я не могу использовать строку запроса в все мои токены слишком длинны, и я получаю ошибку 414. Я хочу создать что-то вроде специального промежуточного программного обеспечения, которое извлекает токен из сообщения SignalR, а затем регистрирует пользователя. –

+0

К сожалению, есть только два способа передачи токена: либо строка запроса, либо как параметр. Надеемся, что это будет рассмотрено в следующей версии SignalR. – mikebridge

ответ

5

Обратите внимание на статью, в которой предлагается использовать строку запроса Authenticate against a ASP.NET Core 1.0 (vNext) SignalR application using JWT. Я знаю, что токен слишком длинный, но автор объясняет, как использовать промежуточное программное обеспечение для аутентификации запроса.

Вот резюме из статьи:

  • SignalR не имеет какого-либо специального механизма аутентификации встроенная, она использует стандартную проверку подлинности ASP.NET.
  • JWT, как правило, передается в авторизации заголовка запроса
  • Клиентская библиотека SignalR JavaScript не включает в себя средство для отправки заголовков в запросах, она тем не менее позволяет передать строку запроса
  • Если мы переходим токен в строке запроса мы можем написать промежуточное программное обеспечение, которое добавляет заголовок авторизации с токеном в качестве значения. Это должно быть сделано до промежуточного JWT в трубопроводе
  • знать о формате «однонаправленного канала»

Я выделил ключевой момент, что пользовательское ПО промежуточного слоя должны быть зарегистрированы до JWT ППО.

+0

Простой контент есть, просто qs слишком длинный –

+0

Я понимаю, что вы долгое время. Можете ли вы вставить токен в полезную нагрузку и использовать промежуточное программное обеспечение для его декодирования, зарегистрировав его раньше? –

+0

Хорошо, я думаю, что у вас может не быть доступа к полезной нагрузке в промежуточном программном обеспечении до SignalR. В этом случае вы можете реализовать пользовательский парсер для токена в коде приложения, когда будете читать полезную нагрузку. Вы не сможете использовать атрибут Authorize, но вы сможете проверить требования пользователя и все такое. –