Configurar una ruta $connect que requiere un subprotocolo WebSocket - Amazon API Gateway

Configurar una ruta $connect que requiere un subprotocolo WebSocket

Los clientes pueden usar el campo Sec-WebSocket-Protocol para solicitar un subprotocolo WebSocket durante la conexión a su API de WebSocket. Puede configurar una integración de la ruta $connect para permitir conexiones solo si un cliente solicita un subprotocolo compatible con su API.

La siguiente función de Lambda de ejemplo devuelve el encabezado Sec-WebSocket-Protocol a los clientes. La función establece una conexión a su API solo si el cliente especifica el subprotocolo myprotocol.

Para obtener una plantilla de AWS CloudFormation que cree este ejemplo de integración de API y proxy de Lambda, consulte ws-subprotocol.yaml.

export const handler = async (event) => { if (event.headers != undefined) { const headers = toLowerCaseProperties(event.headers); if (headers['sec-websocket-protocol'] != undefined) { const subprotocolHeader = headers['sec-websocket-protocol']; const subprotocols = subprotocolHeader.split(','); if (subprotocols.indexOf('myprotocol') >= 0) { const response = { statusCode: 200, headers: { "Sec-WebSocket-Protocol" : "myprotocol" } }; return response; } } } const response = { statusCode: 400 }; return response; }; function toLowerCaseProperties(obj) { var wrapper = {}; for (var key in obj) { wrapper[key.toLowerCase()] = obj[key]; } return wrapper; }

Puede usar wscat para probar si su API permite conexiones solo si un cliente solicita un subprotocolo compatible con su API. Los siguientes comandos utilizan el indicador -s para especificar subprotocolos durante la conexión.

El siguiente comando intenta una conexión con un subprotocolo no compatible. Dado que el cliente especificó el subprotocolo chat1, la integración de Lambda devuelve un error 400 y la conexión no es correcta.

wscat -c wss://api-id.execute-api.region.amazonaws.com/beta -s chat1 error: Unexpected server response: 400

El siguiente comando incluye un subprotocolo admitido en la solicitud de conexión. La integración de Lambda permite la conexión.

wscat -c wss://api-id.execute-api.region.amazonaws.com/beta -s chat1,myprotocol connected (press CTRL+C to quit)

Para obtener más información acerca de cómo invocar la API de WebSocket, consulte Invocación de una API de WebSocket.