Configuration d'un $connect itinéraire qui nécessite un WebSocket sous-protocole - 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'un $connect itinéraire qui nécessite un WebSocket sous-protocole

Les clients peuvent utiliser Sec-WebSocket-Protocol ce champ pour demander un WebSocket sous-protocole lors de la connexion à votre WebSocket API. 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 AWS CloudFormation modèle 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 en savoir plus sur l'appel d' WebSocket API, consultezInvoquer une API WebSocket .