Expiration du jeton daccès aws

Comment personnaliser les jetons d’accès dans les groupes d’utilisateurs Amazon Cognito

par Edward Sunon dans Amazon Cognito, Bonnes pratiques, Intermédiaire (200), Sécurité, identité et conformité, Guide techniquePermalien Commentaires Partager

Avec Amazon Cognito, vous pouvez mettre en œuvre la gestion des identités et des accès des clients (CIAM) dans vos applications Web et mobiles. Vous pouvez ajouter l’authentification des utilisateurs et le contrôle d’accès à vos applications en quelques minutes.

Dans cet article, je vous présente la nouvelle fonctionnalité de personnalisation des jetons d’accès pour les groupes d’utilisateurs Amazon Cognito et je vous montre comment l’utiliser. La personnalisation du jeton d’accès est incluse dans les fonctionnalités de sécurité avancées (ASF) d’Amazon Cognito. Notez que ASF est soumis à une tarification supplémentaire, comme décrit sur la page de tarification d’Amazon Cognito.

Qu’est-ce que la personnalisation du jeton d’accès ?

Lorsqu’un utilisateur se connecte à votre application, Amazon Cognito vérifie sa connexion informations, et si l’utilisateur est authentifié avec succès, renvoie l’ID, l’accès et les jetons d’actualisation. Le jeton d’accès, qui utilise le format JSON Web Token (JWT) conformément à la norme RFC7519, contient des revendications dans la charge utile du jeton qui identifient le principal authentifié, ainsi que des attributs de session tels que l’heure d’authentification et l’heure d’expiration du jeton. Plus important encore, le jeton d’accès contient également des attributs d’autorisation sous la forme d’appartenances à des groupes d’utilisateurs et d’étendues OAuth. Vos applications ou serveurs de ressources d’API peuvent évaluer les revendications de jeton pour autoriser des actions spécifiques au nom des utilisateurs.

Grâce à la personnalisation du jeton d’accès, vous pouvez ajouter des revendications spécifiques à l’application au jeton d’accès standard, puis prendre des décisions d’autorisation précises pour offrir une expérience différenciée à l’utilisateur final. Vous pouvez affiner les revendications d’étendue d’origine pour restreindre davantage l’accès à vos ressources et appliquer l’accès le moins privilégié. Vous pouvez également enrichir les jetons d’accès avec des revendications provenant d’autres sources, telles que des informations d’abonnement d’utilisateur stockées dans une table Amazon DynamoDB. Votre application peut utiliser cette revendication enrichie pour déterminer le niveau d’accès et le contenu disponibles pour l’utilisateur. Cela réduit la nécessité de créer une solution personnalisée pour rechercher des attributs dans le code de votre application, ce qui réduit la complexité de l’application, améliore les performances et facilite l’expérience d’intégration avec les applications en aval.

Comment utiliser la fonctionnalité de personnalisation du jeton d’accès ?

Amazon Cognito fonctionne avec les fonctions AWS Lambda pour modifier le comportement d’authentification et l’expérience de l’utilisateur final de votre groupe d’utilisateurs. Dans cette section, vous allez apprendre à configurer une fonction de déclenchement Lambda de prégénération de jeton et à l’appeler pendant le processus d’authentification Amazon Cognito. Je vais également vous montrer un exemple de fonction pour vous aider écrivez votre propre fonction Lambda.

Flux de déclencheur Lambda

Lors de l’authentification d’un utilisateur, vous pouvez choisir de demander à Amazon Cognito d’appeler un déclencheur de prégénération de jeton pour enrichir et personnaliser vos jetons.

Figure 1 : Flux de déclencheur de prégénération de jeton

La figure 1 illustre le flux de déclencheur de prégénération de jeton. Ce flux comporte les étapes suivantes :

  1. Un utilisateur final se connecte à votre application et s’authentifie auprès d’un groupe d’utilisateurs Amazon Cognito.
  2. Une fois que l’utilisateur a terminé l’authentification, Amazon Cognito appelle le déclencheur Lambda de prégénération de jeton et envoie les données d’événement à votre fonction Lambda, telles que userAttributes et scopes, dans un événement de déclencheur de prégénération de jeton.
  3. Le code de votre fonction Lambda traite la logique d’enrichissement du jeton et renvoie un événement de réponse à Amazon Cognito pour indiquer les revendications qui que vous souhaitez ajouter ou supprimer.
  4. Amazon Cognito vend un JWT personnalisé à votre application.

Le flux de déclencheur de prégénération de jeton prend en charge les types d’octroi OAuth 2.0, tels que le flux d’octroi de code d’autorisation et le flux d’octroi implicite, et prend également en charge l’authentification de l’utilisateur via le kit SDK AWS.

Votre

groupe d’utilisateurs Amazon Cognito fournit deux versions différentes de l’événement déclencheur de prégénération de jeton à votre fonction Lambda. La version 1 de l’événement de déclencheur inclut userAttributes, groupConfiguration et clientMetadata dans la demande d’événement, que vous pouvez utiliser pour personnaliser les revendications de jeton d’ID. La version 2 de l’événement déclencheur ajoute une portée dans la demande d’événement, que vous pouvez utiliser pour personnaliser les étendues dans le jeton d’accès en plus de personnaliser d’autres revendications.

Dans cette section, je vais vous montrer comment mettre à jour votre groupe d’utilisateurs pour déclencher l’événement Version 2 et activer la personnalisation du jeton d’accès.

Pour activer la personnalisation du jeton d’accès

  1. , ouvrez la console du pool d’utilisateurs Cognito, puis choisissez Pools d’utilisateurs .
  2. Choisissez le groupe d’utilisateurs cible pour la personnalisation du jeton.
  3. Sous l’onglet Propriétés du  pool d’utilisateurs, dans la  section Déclencheurs  Lambda, choisissez Ajouter un déclencheur Lambda .
  4. Figure 2 : ajout d’un déclencheur Lambda

  5. Dans la section Déclencheurs Lambda, procédez comme suit :
    1. Pour Type de déclencheur , sélectionnez Authentification .
    2. Pour Authentification , sélectionnez Déclencheur de prégénération de jeton .
    3. pour Version de l’événement déclencheur , sélectionnez Fonctionnalités de base + personnalisation du jeton d’accès – Recommandé . Si cette option n’est pas disponible, assurez-vous d’avoir activé les fonctionnalités de sécurité avancées. Vous devez avoir activé les fonctionnalités de sécurité avancées pour accéder à cette option.
  6. Figure 3 : Sélectionner un déclencheur Lambda

  7. Sélectionnez votre fonction Lambda et attribuez-la en tant que déclencheur de prégénération de jeton. Choisissez ensuite Ajouter un déclencheur Lambda .
  8. Figure 4 : Ajouter un déclencheur Lambda

Exemple de déclencheur de prégénération de jeton

Maintenant que vous avez activé la personnalisation du jeton d’accès, je vais vous présenter un exemple de code du déclencheur Lambda de prégénération de jeton et de l’événement de déclencheur de version 2. Cet exemple de code examine la demande d’événement déclencheur et ajoute un nouveau claim et une portée OAuth personnalisée dans la réponse pour qu’Amazon Cognito personnalise le jeton d’accès en fonction de divers schémas d’autorisation.

Voici un exemple d’événement déclencheur de la version 2. La demande d’événement contient les attributs d’utilisateur du groupe d’utilisateurs Amazon Cognito, les revendications d’étendue d’origine et les configurations de groupe d’origine. Elle comporte deux attributs personnalisés (appartenance et emplacement) qui sont collectés lors du processus d’inscription des utilisateurs et stockés dans le groupe d’utilisateurs Cognito.

Dans l’exemple de code suivant, j’ai transformé l’attribut d’emplacement et l’attribut d’appartenance de l’utilisateur pour ajouter une revendication personnalisée et une étendue personnalisée. J’ai utilisé le champ claimsToAddOrOverride pour créer une nouvelle revendication personnalisée appelée demo :membershipLevel avec une valeur d’adhésion Premium à partir de la demande d’événement. J’ai également construit un nouveau périmètre avec la valeur de l’appartenance : USA. Premium via la revendication scopesToAdd , et ajouté la nouvelle revendication et scope dans la réponse à l’événement.

Avec le code précédent, le déclencheur Lambda renvoie la réponse suivante à Amazon Cognito pour indiquer la personnalisation nécessaire pour les jetons d’accès.

Ensuite, Amazon Cognito émet des jetons avec ces personnalisations au moment de l’exécution :

votre application peut alors utiliser la nouvelle portée personnalisée et prétendre autoriser les utilisateurs et leur fournir une expérience personnalisée.

Considérations et bonnes pratiques

Il existe quatre considérations générales et bonnes pratiques que vous pouvez suivre :

  1. Certaines revendications et étendues ne sont pas personnalisables . Par exemple, vous ne pouvez pas personnaliser des revendications telles que auth_time, iss et sub, ou des étendues telles que aws.cognito.signin.user.admin. Pour obtenir la liste complète des revendications et des portées exclues, consultez la section Revendications et portées exclues.
  2. Travaillez à rebours à partir de autorisation . Lorsque vous personnalisez des jetons d’accès, vous devez commencer par votre schéma d’autorisation existant, puis décider de personnaliser les étendues ou les revendications, ou les deux. Les scénarios d’autorisation standard basés sur OAuth, tels que les mécanismes d’autorisation Amazon API Gateway, utilisent généralement des étendues personnalisées pour fournir l’accès. Toutefois, si vous avez des exigences d’autorisation complexes ou précises, vous devez envisager d’utiliser à la fois des étendues et des revendications personnalisées pour transmettre des données contextuelles supplémentaires à l’application ou à un service de contrôle d’accès basé sur des politiques tel qu’Amazon Verified Permissions.
  3. Etablir la gouvernance dans la personnalisation des tokens . Vous devez disposer d’une politique d’ingénierie cohérente de l’entreprise pour fournir des conseils de nomenclature pour les portées et les réclamations. Une norme de syntaxe promeut des variables uniques à l’échelle mondiale et évite une collision de noms entre les différentes équipes d’application. Par exemple, l’application X chez AnyCompany peuvent choisir de nommer leur étendue comme ac.appx.claim_name, où ac représente AnyCompany en tant qu’identificateur global et appx.claim_name représente la revendication personnalisée de l’application X.
  4. Soyez conscient des limites . Étant donné que les jetons sont transmis par différents réseaux et systèmes, vous devez être conscient des limitations potentielles de la taille des jetons dans vos systèmes. Vous devez garder les noms de portée et de revendication aussi courts que possible, tout en restant descriptifs.

Conclusion

Dans cet article, vous avez appris à intégrer un déclencheur Lambda de prégénération de jeton à votre pool d’utilisateurs Amazon Cognito pour personnaliser les jetons d’accès. Vous pouvez utiliser la fonctionnalité de personnalisation du jeton d’accès pour fournir des services différenciés à vos utilisateurs finaux en fonction des revendications et des étendues OAuth. Pour plus d’informations, consultez Déclencheur Lambda de prégénération de jeton dans le Guide du développeur Amazon Cognito.

Si vous avez des commentaires sur cet article, soumettez vos commentaires dans la section Commentaires ci-dessous. Si vous avez des questions sur cet article, contactez AWS Support.

Vous souhaitez en savoir plus sur la sécurité AWS ? Suivez-nous sur Twitter.

Edward Sun

Edward est un architecte de solutions spécialisé dans la sécurité qui se concentre sur la gestion des identités et des accès. Il aime aider les clients tout au long de leur parcours de transformation vers le cloud en matière de conception d’architecture, de bonnes pratiques de sécurité, de migration et d’optimisation des coûts. En dehors du travail, Edward aime faire de la randonnée, jouer au golf et encourager son alma mater, les Bulldogs de Géorgie.

MOTS CLÉS : Amazon Cognito, Blog sur la sécurité