2017-10-02 3 views
1

Je crée une application de réaction sans serveur qui utilise Cognito pour la connexion/déconnexion. L'application appelle API Gateway qui est configurée pour utiliser le pool d'utilisateurs Cognito en tant qu'autorisateur personnalisé.Quand API Gateway valide-t-il le jeton Cognito ID révoqué?

Je crée également une fonction lambda pour déconnecter un utilisateur (cognitoIdentityServiceProvider.globalSignOut). Lorsque je me connecte à l'application et que j'appelle la fonction lambda pour effectuer une déconnexion admin, les appels aux fonctions de passerelle API protégées de l'application sont toujours valides (avec le jeton Cognito ID passé en Authorization en-tête);

Les appels d'administration tels que cognitoIdentityServiceProvider.globalSignOut et cognitoIdentityServiceProvider.adminUserGlobalSignOut ne sont-ils pas en temps réel ou API Gateway est-elle configurée pour valider uniquement après une heure?

Répondre

0

Juste trouvé la réponse, malheureusement pas ce que je voulais entendre:

Parce que IdToken est représenté comme un jeton de clé Web JSON, il est signé avec une paire de clés secrète ou privée/publique, ce qui signifie que même si vous révoque l'IdToken, il n'existe aucun moyen de révoquer la clé publique distribuée . Et IdToken a une durée de vie courte, il expirera dans un temps court .

Is it possible to revoke AWS Cognito IdToken?

https://github.com/aws/aws-sdk-js/issues/1687

https://github.com/aws/amazon-cognito-identity-js/issues/21

0

Il s'agit des paramètres par défaut du pool d'utilisateurs Cognito. Le jeton d'accès expire une heure après l'authentification de l'utilisateur. Il ne devrait pas être traité après son expiration.

Vous pouvez révoquer tous les jetons utilisateur en utilisant les API GlobalSignOut et AdminUserGlobalSignOut. Après que l'utilisateur a été déconnecté:

  • Le jeton d'actualisation de l'utilisateur ne peut pas être utilisé pour obtenir de nouveaux jetons pour l'utilisateur.
  • Le jeton d'accès de l'utilisateur ne peut pas être utilisé contre le service de pools d'utilisateurs.
  • L'utilisateur doit se réauthentifier pour obtenir de nouveaux jetons.

Une application peut utiliser l'API GlobalSignOut pour permettre à des utilisateurs individuels de se déconnecter de tous les périphériques. En règle générale, une application présente cette option comme un choix, tel que Se déconnecter de tous les appareils. L'application doit appeler cette méthode avec le jeton d'accès valide, non expiré et révoqué de l'utilisateur. Cette méthode ne peut pas être utilisée pour permettre à un utilisateur de se déconnecter d'un autre utilisateur.

Une application administrateur peut utiliser l'API AdminUserGlobalSignOut pour permettre aux administrateurs de déconnecter un utilisateur de tous les appareils. L'application d'administrateur doit appeler cette méthode avec les informations d'identification du développeur AWS et transmettre l'ID du pool d'utilisateurs et le nom d'utilisateur de l'utilisateur en tant que paramètres. L'API AdminUserGlobalSignOut peut déconnecter tout utilisateur du pool d'utilisateurs.

S'il vous plaît consulter la documentation officielle: - http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html

+0

merci de répondre, mais pouvez-vous confirmer qu'appeler 'adminUserGlobalSignOut' fait ou * ne * déconnecte pas l'utilisateur immédiatement, mais seulement après quand le jeton d'actualisation doit être utilisé, avant une heure. Dans mon cas, je dois terminer la session utilisateur immédiatement, mais cela ne semble pas être le cas, car l'en-tête 'authorization' avec token dans l'appel à API Gateway affiche toujours une session valide (ie API Gateway ne retourne pas un erreur sur le jeton d'utilisateur invalide ou similaire, comme "jeton d'accès a été révoqué" .S'il vous plaît mettre à jour votre réponse en fonction du comportement connu de API Gateway – user1322092

+0

mis à jour ma question pour être clair sur le jeton .Autoriseur personnalisé API Gateway qui utilise un Cognito Le pool d'utilisateurs requiert uniquement le jeton Cognito ID ('axios.defaults.headers.common.Authorization = session.idToken.jwtToken;'). – user1322092

0

Je suis sur l'équipe Cognito. globalSignOut révoque le jeton d'accès et le jeton d'actualisation. Le jeton d'identification est un jeton de support, utilisé avec des systèmes externes aux pools d'utilisateurs.API Gateway l'acceptera toujours, mais sa validité est de 1 heure.

+0

Merci, Ionut !. Mon application Web sans serveur utilise un autorisateur de pool d'utilisateurs Cognito dans API Gateway pour appliquer Sécurité API API Gateway ne valide que le jeton ID (pas Access ni Refresh) Si une fonction lambda cron appelle adminUserGlobalSignOut 20 minutes après la connexion, alors techniquement API Gateway acceptera le jeton au-delà des vingt minutes, o une heure. Je dirais que c'est une lacune dans la conception, pensez-vous? En fin de compte, j'essaie d'imiter un framework basé sur un serveur où les sessions expirent souvent entre 15 et 30 minutes. Cognito semble obsédé par les expériences d'applications mobiles où 1 heure ou plus est plus approprié. – user1322092