2017-09-08 4 views
-1

J'utilise AWS Lambda + Cognito (pool d'utilisateurs + identité fédérée) + passerelle API. Les utilisateurs s'authentifient dans l'application WEB avec amazon-cognito-identity-js et invoquent API avec aws-api-gateway-client. Les méthodes API Gateway ont un autorisateur AWS_IAM. Comment obtenir le nom d'utilisateur (à partir du pool d'utilisateurs) dans la fonction Lambda?Comment obtenir le nom d'utilisateur actuel dans AWS Lambda?

+0

En quoi cette question est-elle différente de vos messages précédents? https://stackoverflow.com/questions/46120881/how-to-get-cognito-user-in-aws-lambda https://stackoverflow.com/questions/46108431/using-aws-lambda-avec-cognito- et-api-gateway –

+0

Connexes: https://stackoverflow.com/questions/37963906/how-to-get-user-attributes-username-email-etc-using-cognito-identity-id – jarmod

+0

@MarkB J'ai supprimé ce poste – Ildar

Répondre

0

Modifiez la demande envoyée à votre fonction Lambda en utilisant aws-api-gateway-client pour passer le JWT AccessToken dans l'en-tête. Vous devrez peut-être ensure your API gateway is configured to pass headers.

Vous devez chiffrer ce jeton à l'aide d'un secret partagé pour un service externe. Vous devrez ensuite le décoder dans la fonction de gestionnaire lambda.

apigClient.invokeApi(
    params, 
    pathTemplate, 
    method, 
    { { headers: { accessToken } } }, 
    body); 

Notez queusing the AccessToken makes sense here puisque nous ne sommes pas pris la peine d'autres détails pour les utilisateurs. Un AccessToken est obtenu après authentification en utilisant amazon-cognito-identity-js.

Vous pouvez analyser ce champ à partir de l'en-tête de la demande dans votre fonction de gestionnaire lambda.

import { util } from 'aws-sdk/global'; 

exports.handler = function(event, context) { 
    // parse access Token from request header 
    const headers = event.headers; 
    const payload = headers.accessToken.split('.')[1]; 

    const { username } = JSON.parse(
    util.base64.decode(
     payload 
    ) 
    .toString('utf8') 
); 

    ... 
};