Comment créer et configurer des mécanismes d’autorisation Lambda dans API Gateway pour l'authentification et la transmission de données ?
Je souhaite transmettre des données entre Amazon API Gateway, les mécanismes d’autorisation AWS Lambda et les services dorsaux. Je souhaite également gérer les limites d'accès aux données de demande dans les mécanismes d’autorisation.
Résolution
Remarque : assurez-vous d'activer les journaux d'exécution d'Amazon CloudWatch avec suivi des données. Déployez également votre API après avoir modifié les modèles d'intégration ou de mappage.
Créer un mécanisme d’autorisation Lambda dans API Gateway
Prérequis : Créez une fonction Lambda. Pour obtenir des instructions Python, consultez la section Création de fonctions Lambda avec Python. Pour obtenir des instructions sur Node.js, consultez la section Création de fonctions Lambda avec Node.js.
Créez un mécanisme d’autorisation Lambda REQUEST. Dans Type de source d'identité, assurez-vous de le conserver en tant qu'en-tête. Dans Clé, entrez un nom pour votre clé, tel que Authorizationtoken.
Configurer votre mécanisme d’autorisation Lambda et accédez au corps de la demande
Les mécanismes d’autorisation de requêtes peuvent accéder uniquement aux en-têtes, aux paramètres de la requête, aux variables d'étape et aux variables de contexte. Dans API Gateway, les données du corps de la demande ne sont pas transmises aux fonctions du mécanisme d'autorisation. Pour accéder au corps de la requête, configurez votre mécanisme d’autorisation Lambda et utilisez des en-têtes HTTP ou des paramètres de chaîne de requête pour envoyer les données requises pour l'autorisation.
Procédez comme suit :
-
Ouvrez la console API Gateway.
-
Sélectionnez votre API, puis sélectionnez votre ressource.
-
Sous Méthodes, sélectionnez votre méthode, puis configurez votre mécanisme d’autorisation Lambda.<br id=hardline_break/> Remarque : lorsque vous configurez votre mécanisme d’autorisation, les noms d'en-tête doivent être en minuscules.
-
Exemple de code pour un mécanisme d’autorisation Lambda :
exports.handler = async (event) => { console.log('Authorizer event:', JSON.stringify(event, null, 2)); const headers = event.headers || {}; const queryParams = event.queryStringParameters || {}; const requestContext = event.requestContext || {}; evaluation_logic_returned_policy return { principalId: 'user', policyDocument: { Version: '2012-10-17', Statement: [{ Action: 'execute-api:Invoke', Effect: 'Allow', Resource: event.methodArn }] }, context: { userId: '123', headerData: headers['validation-data-via-header'] || 'no-header-data', queryData: queryParams.validationData || 'no-query-data', contextresourcePath: requestContext.resourcePath || 'no-context-resource-path' } }; };Remarque : l'exemple de code montre un mécanisme d’autorisation qui a accès aux données client envoyées via les en-têtes et les paramètres de requête. Le mécanisme d’autorisation utilise les données du client pour évaluer l'autorisation d'accès. De plus, l'exemple de code autorise toutes les requêtes. Pour renvoyer une autre politique, remplacez evaluation_logic_returned_policy par votre logique d'évaluation.
-
Exécutez la commande suivante pour envoyer des informations à l'API et tester l'accès du mécanisme d’autorisation.
curl -i -X POST "https://api-id.execute-api.region.amazonaws.com/stage_name/resource_path?validationData=test-query-value" \ -H "Authorizationtoken: allow" -H "Validation-Data-Via-Header: test-header-value" \ -H "Content-Type: application/json" \ --data '{"test":"data"}'Remarque : remplacez api-id par votre ID d'API, region par votre région AWS, stage_name par le nom de l’étape d’API et resource_path par le chemin de votre API. De plus, si vous avez saisi un autre nom pour votre clé, remplacez Authorizationtoken par le nom de votre clé.
-
Consultez les journaux de votre fonction Lambda ou de votre API Gateway pour vous assurer que votre mécanisme d’autorisation dispose d’un accès.
Pour plus d'informations, consultez la section Sortie d'un mécanisme d’autorisation Lambda API Gateway.
Utiliser une intégration Lambda ou HTTP pour accéder au contexte des services dorsaux
Lorsque votre mécanisme d’autorisation renvoie des informations contextuelles, il est possible que vous n'ayez pas accès aux informations contextuelles de vos services dorsaux. Si vous n'y avez pas accès, vous devez utiliser une intégration Lambda ou HTTP comme backend.
Utiliser une fonction Lambda avec une intégration proxy
Si vous utilisez une fonction Lambda avec une intégration proxy, l'événement que votre fonction Lambda reçoit ajoute automatiquement des données contextuelles.
Exemple d’événement :
{ "httpMethod": "POST", "headers": { ... }, ... "requestContext": { "resourceId": "o8nevr", "authorizer": { "principalId": "user", "integrationLatency": 348, }, ... }, "body": "{\"test\":\"data\"}", ... }
Utilisez une fonction Lambda avec une intégration sans proxy
Si vous utilisez une fonction Lambda avec une intégration sans proxy, vous devez utiliser un modèle de mappage. Le modèle de mappage inclut les informations contextuelles de la charge utile envoyée à la fonction Lambda.
Pour utiliser un modèle de mappage, procédez comme suit :
-
Ouvrez la console API Gateway.
-
Sélectionnez votre API, puis sélectionnez votre ressource.
-
Sous Méthodes, sélectionnez votre méthode, puis choisissez Demande d'intégration.
-
Dans Modèles de mappage, ajoutez content-type: application/json, puis entrez le modèle suivant :
{ "body": $input.json('$'), "authorizer-context": { "context-key": "$context.authorizer.context-key" } }Remarque : remplacez context-key par le nom que vous souhaitez donner à votre clé contextuelle.
Utiliser une intégration HTTP avec une intégration proxy
Si vous utilisez une intégration proxy, vous devez utiliser des en-têtes ou des paramètres de chaîne de requête dans la demande d'intégration pour inclure les informations contextuelles.
Procédez comme suit :
- Ouvrez la console API Gateway.
- Sélectionnez votre API, puis sélectionnez votre ressource.
- Sous Méthodes, sélectionnez votre méthode.
- Choisissez Demande d'intégration, puis Modifier.
- Sous Paramètres de chaîne de requête URL, sélectionnez Ajouter un paramètre de chaîne de requête.
- Dans Nom, saisissez header-with-context-information.
- Dans Mappage à partir de, saisissez context.authorizer.context-key.<br id=hardline_break/> Remarque : remplacez context-key par le nom de votre clé contextuelle.
- Sélectionnez Enregistrer.
Votre backend HTTP ajoute les informations contextuelles aux en-têtes ou aux paramètres de chaîne de requête en fonction de la section à laquelle vous avez ajouté les informations contextuelles lors de votre intégration.
Utiliser une intégration HTTP avec une intégration sans proxy
Si vous utilisez une intégration sans proxy, vous devez ajouter un en-tête ou des paramètres de chaîne de requête. Vous pouvez également utiliser un modèle de mappage. Pour savoir comment ajouter un en-tête ou des paramètres de chaîne de requête, consultez la section Configurer votre mécanisme d’autorisation Lambda et accéder au corps de la demande de cet article. Pour obtenir des instructions sur l'utilisation d'un modèle de mappage, consultez la section Utiliser une fonction Lambda avec une intégration sans proxy de cet article.
- Balises
- Amazon API Gateway
- Langue
- Français

Contenus pertinents
demandé il y a un an
demandé il y a 2 ans
demandé il y a 3 ans
AWS OFFICIELA mis à jour il y a un an