Я пытаюсь использовать функциональность AWS API Gateway WebSocket для связи с моим угловым приложением.В соответствии с требованиями предприятия, мне необходимо защитить конечную точку WebSocket токеном OAuth.
Я написал собственный авторизатор OAuth для проверки токена OAuth.
Этот пользовательский авторизатор работает нормальнос моими конечными точками REST.
Насколько я понимаю, браузеры не могут поддерживать настраиваемые заголовки для WebSocket ( HTTP-заголовки в API клиента Websockets ).
Чтобы обойти это ограничение, Я использую заголовок Sec-WebSocket-Protocol для передачи моего OAuth-токена в целях аутентификации.
(Аутентификация на основе строки запроса может не работать, так как я бы превысил ограничения строки URL)
Я настроил конфигурацию моего API-шлюза так, чтобы принимать Sec-WebSocket-Protocol в качестве заголовка аутентификации, и кажется, что все работает нормально с утилитой WSCAT.
Когда я интегрирую эту конечную точку с моим Angular Client, используя RxJS (https://rxjs -dev.firebaseapp.com / api / webSocket / webSocket ) все этоРешение отлично работает в FireFox и Edge Browser, но Chrome создает исключение рукопожатия, т.е.
WebSocket connection to 'wss://xxxx.com/' failed: Error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received
Заголовки запроса:
GET wss://xxxx.com/ HTTP/1.1
Host: xxxx.com
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://localhost:4200
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Sec-WebSocket-Key: asdf
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Protocol: asdf
Заголовки ответа:
HTTP/1.1 101 Switching Protocols
Connection: upgrade
Date: Tue, 11 Jun 2019 06:15:43 GMT
upgrade: websocket
sec-websocket-accept: asdf
sec-websocket-extensions: permessage-deflate
X-Cache: Miss from cloudfront
Via: 1.1 asdf
X-Amz-Cf-Pop: BOM51
X-Amz-Cf-Id: asdf