Можно ли использовать проверку подлинности на предъявителя для запросов обновления веб-узлов?

Запрос на обновление для открытия соединения с websocket является стандартным HTTP-запросом. На стороне сервера я могу аутентифицировать запрос, как и любой другой. В моем случае я хотел бы использовать аутентификацию на предъявителя. К сожалению, нет способа указать заголовки при открытии соединения в веб-обозревателе в браузере, что приведет меня к мысли, что невозможно использовать проверку подлинности на предъявителя для аутентификации запроса обновления веб-сокета. Итак - я что-то упускаю, или это действительно невозможно? Если это невозможно, то это по дизайну, или это вопиющий надзор в реализации браузера API-интерфейсов браузера?

Ответ 1

Вы правы, теперь нельзя использовать заголовок аутентификации из-за дизайна API Javascript WebSocket. Более подробную информацию можно найти в этой теме: HTTP-заголовки в API-интерфейсах Websockets

Однако тип аутентификации на предъявителя позволяет использовать параметр запроса с именем "access_token": http://self-issued.info/docs/draft-ietf-oauth-v2-bearer.html#query-param Этот метод совместим с подключением к сети.

Ответ 2

API позволяет вам установить ровно один заголовок, а именно Sec-WebSocket-Protocol, то есть подпротокол конкретного приложения. Вы можете использовать этот заголовок для передачи токена-носителя. Например:

new WebSocket("ws://www.example.com/socketserver", ["access_token", "3gn11Ft0Me8lkqqW2/5uFQ="]);

Ожидается, что сервер примет один из протоколов, поэтому в приведенном выше примере вы можете просто проверить токен и ответить заголовком Sec-WebSocket-Protocol = access_token.