Configuration d'une route $connect nécessitant un sous-protocole WebSocket - Amazon API Gateway

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration d'une route $connect nécessitant 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, veuillez consulter 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 de plus amples informations sur l'appel des API WebSocket, veuillez consulter Appel d'une API WebSocket.