Configuration d’une route $connect exigeant un sous-protocole WebSocket - Amazon API Gateway

Configuration d’une route $connect exigeant un sous-protocole WebSocket

Les clients peuvent utiliser le champ Sec-WebSocket-Protocol pour demander un sous-protocole WebSocket lors de la connexion à votre API WebSocket. Vous pouvez configurer une intégration pour la route $connect afin d’autoriser les connexions uniquement si un client demande un sous-protocole pris en charge par votre API.

L’exemple de fonction Lambda suivant renvoie l’en-tête Sec-WebSocket-Protocol aux clients. La fonction établit une connexion à votre API uniquement si le client spécifie le sous-protocole myprotocol.

Pour un modèle AWS CloudFormation qui crée cet exemple d’intégration d’API et de proxy Lambda, consultez 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; }

Vous pouvez utiliser wscat pour vérifier que votre API autorise les connexions uniquement si un client demande un sous-protocole pris en charge par votre API. Les commandes suivantes utilisent l’indicateur -s pour spécifier des sous-protocoles pendant la connexion.

La commande suivante tente une connexion avec un sous-protocole non pris en charge. Étant donné que le client a spécifié le sous-protocole chat1, l’intégration Lambda renvoie une erreur 400 et la connexion échoue.

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

La commande suivante inclut un sous-protocole pris en charge dans la demande de connexion. L’intégration Lambda permet la connexion.

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

Pour plus d’informations sur l’appel des API WebSocket, consultez Invocation d’une API WebSocket.