Clients de l’application de groupe d’utilisateurs - Amazon Cognito

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.

Clients de l’application de groupe d’utilisateurs

Un client d’application de groupe d’utilisateurs est une configuration au sein d’un groupe d’utilisateurs qui interagit avec une application mobile ou Web qui s’authentifie auprès d’Amazon Cognito. Les clients d’application peuvent appeler des opérations d’API authentifiées et non authentifiées et lire ou modifier tout ou partie des attributs de vos utilisateurs. Votre application doit s’identifier auprès du client d’application dans les opérations d’enregistrement, de connexion et de gestion des mots de passe oubliés. Ces demandes d’API doivent inclure une auto-identification à l’aide d’un ID client d’application et une autorisation avec un secret client facultatif. Vous devez sécuriser les ID ou secrets des clients d’application afin que seules les applications client autorisées puissent appeler ces opérations non authentifiées. En outre, si vous configurez votre application pour signer des demandes d'API authentifiées à l'aide AWS d'informations d'identification, vous devez protéger vos informations d'identification contre toute inspection par les utilisateurs.

Vous pouvez créer plusieurs applications pour un groupe d’utilisateurs. Un client d’application peut être lié à la plateforme de code d’une application ou à un locataire distinct dans votre groupe d’utilisateurs. Par exemple, vous pouvez créer une application pour une application côté serveur et une application Android distincte. Chaque application a son propre ID de client d’application.

Types de client d’application

Lorsque vous créez un client d’application dans Amazon Cognito, vous pouvez préremplir les options en fonction des types de client OAuth standard client public et client confidentiel. Configurez un client confidentiel avec un secret client. Pour plus d’informations sur les types de clients, consultez IETF RFC 6749 #2.1.

Client public

Un client public s’exécute dans un navigateur ou sur un appareil mobile. Étant donné qu’il ne dispose pas de ressources approuvées côté serveur, il ne possède pas de secret client.

Client confidentiel

Un client confidentiel dispose de ressources côté serveur qui peuvent être approuvée à l’aide d’un secret client pour des opérations d’API non authentifiées. L’application peut s’exécuter en tant que démon ou script shell sur votre serveur backend.

Secret client

Un secret client, ou un mot de passe client, est une chaîne fixe que votre application doit utiliser dans toutes les demandes d’API adressées au client d’application. Votre client d’application doit posséder un secret client pour effectuer des octrois client_credentials. Pour en savoir plus, consultez IETF RFC 6749 #2.3.1.

Vous ne pouvez pas modifier les secrets après avoir créé une application. Vous pouvez créer une nouvelle application avec un nouveau secret, si vous souhaitez effectuer une rotation du secret. Vous pouvez également supprimer une application pour empêcher les applications qui utilisent cet ID de client d’application d’y accéder.

Vous pouvez utiliser un client confidentiel et un secret client avec une application publique. Utilisez un CloudFront proxy Amazon pour ajouter un fichier SECRET_HASH en transit. Pour plus d'informations, consultez la section Protéger les clients publics pour Amazon Cognito à l'aide d'un CloudFront proxy Amazon sur le AWS blog.

Jetons Web JSON

Les clients de l’application Amazon Cognito peuvent émettre des jetons Web JSON (JWT) possédant les types suivants.

Jeton d’identité (ID)

Une déclaration vérifiable indiquant que votre utilisateur est authentifié à partir de votre groupe d’utilisateurs. OpenID Connect (OIDC) a ajouté la spécification du jeton d’identification aux normes des jetons d’accès et d’actualisation définies par OAuth 2.0. Le jeton d’identification contient des informations d’identité, telles que les attributs utilisateur, que votre application peut utiliser pour créer un profil utilisateur et fournir des ressources. Pour plus d’informations, consultez Utilisation du jeton d'identification.

Jeton d’accès

Une déclaration vérifiable des droits d’accès de vos utilisateurs. Le jeton d’accès contient des portées, une fonctionnalité d’OIDC et d’OAuth 2.0. Votre application peut présenter des portées aux ressources principales et prouver que votre groupe d’utilisateurs a autorisé un utilisateur ou une machine à accéder aux données à partir d’une API, ou à ses propres données utilisateur. Un jeton d’accès avec des portées personnalisées, souvent issu d’une autorisation d’informations d’identification du client M2M, autorise l’accès à un serveur de ressources. Pour plus d’informations, consultez Utilisation du jeton d'accès.

Jeton d’actualisation

Déclaration chiffrée d’authentification initiale que votre application peut présenter à votre groupe d’utilisateurs lorsque les jetons de votre utilisateur expirent. Une demande de jeton d’actualisation renvoie de nouveaux jetons d’accès et d’identification non expirés. Pour plus d’informations, consultez Utilisation du jeton actualisation.

Vous pouvez définir l’expiration de ces jetons pour chaque client d’application depuis l’onglet Intégration des applications de votre groupe d’utilisateurs dans la console Amazon Cognito.

Termes du client d’application

Les termes suivants sont les propriétés disponibles des clients d’application dans la console Amazon Cognito.

URL de rappel autorisées

Une URL de rappel indique où l’utilisateur doit être redirigé lorsque la connexion aboutit. Choisissez au moins une URL de rappel. L’URL de rappel doit :

  • Être un URI absolu.

  • Être pré-enregistré auprès d’un client.

  • Ne pas inclure un composant de fragment.

Veuillez consulter OAuth 2.0 - Point de terminaison de redirection.

Amazon Cognito exige HTTPS plutôt que HTTP, sauf pour http://localhost à des fins de test uniquement.

Les URL de rappel d’application comme myapp://example sont également prises en charge.

URL de déconnexion autorisées

Une URL de déconnexion indique où l’utilisateur doit être redirigé après la déconnexion.

Autorisations de lecture et d’écriture pour les attributs

Votre groupe d'utilisateurs peut compter de nombreux clients, chacun ayant son propre client d'application et IdPs. Vous pouvez configurer le client de votre application pour qu’il dispose d’un accès en lecture et en écriture uniquement aux attributs utilisateur pertinents pour l’application. Dans des cas tels que l'autorisation machine-to-machine (M2M), vous ne pouvez accorder l'accès à aucun de vos attributs utilisateur.

Considérations relatives à la configuration des autorisations de lecture et d’écriture des attributs
  • Lorsque vous créez un client d’application dans la console Amazon Cognito et que vous ne personnalisez pas les autorisations de lecture et d’écriture des attributs, Amazon Cognito accorde des autorisations de lecture et d’écriture à tous les attributs du groupe d’utilisateurs.

  • Vous pouvez accorder un accès en écriture à des attributs personnalisés immuables. Votre client d’application peut écrire des valeurs dans des attributs inaltérables lorsque vous créez ou inscrivez un utilisateur. Ensuite, vous ne pouvez pas écrire de valeurs dans des attributs personnalisés immuables pour l’utilisateur.

  • Les clients de l’application doivent disposer d’un accès en écriture aux attributs requis dans votre groupe d’utilisateurs. La console Amazon Cognito définit automatiquement les attributs requis comme étant accessibles en écriture.

  • Vous ne pouvez pas autoriser un client d’application à accéder en écriture à email_verified ou phone_number_verified. Un administrateur de groupe d’utilisateurs peut modifier ces valeurs. Un utilisateur ne peut modifier la valeur de ces attributs que par le biais de la vérification des attributs.

Flux d’authentification

Les méthodes de connexion autorisées par le client de votre application. Votre application peut prendre en charge l’authentification par nom d’utilisateur et mot de passe, le mot de passe distant sécurisé (SRP), l’authentification personnalisée avec des déclencheurs Lambda et l’actualisation des jetons. Pour des raisons de sécurité, utilisez l’authentification SRP comme principale méthode de connexion. L’interface utilisateur hébergée connecte automatiquement les utilisateurs à SRP.

Portées personnalisées

Une règle personnalisée est une règle que vous définissez pour votre propre serveur de ressources dans le Serveur de ressources. Le format est resource-server-identifier/scope. veuillez consulter Portées OAuth 2.0 et autorisation d'API avec des serveurs de ressources.

URI de redirection par défaut

Remplace le redirect_uri paramètre dans les demandes d'authentification des utilisateurs par des tiers IdPs. Configurez ce paramètre du client d'application avec le DefaultRedirectURI paramètre d'une demande d'UpdateUserPoolClientAPI CreateUserPoolClientou d'une demande d'API. Cette URL doit également être membre du client CallbackURLs de votre application. Amazon Cognito redirige les sessions authentifiées vers cette URL lorsque :

  1. Un fournisseur d'identité est attribué à votre client d'application et plusieurs URL de rappel sont définies. Votre groupe d'utilisateurs redirige les demandes d'authentification vers le serveur d'autorisation vers l'URI de redirection par défaut lorsqu'elles ne contiennent aucun redirect_uri paramètre.

  2. Un fournisseur d'identité est attribué à votre client d'application et une URL de rappel est définie. Dans ce scénario, il n'est pas nécessaire de définir une URL de rappel par défaut. Les demandes qui n'incluent pas de redirect_uri paramètre redirigent vers la seule URL de rappel disponible.

Fournisseurs d’identité

Vous pouvez choisir certains ou tous les fournisseurs d'identité externes de votre groupe d'utilisateurs (IdPs) pour authentifier vos utilisateurs. Le client d’application peut également n’authentifier que les utilisateurs locaux dans votre groupe d’utilisateurs. Lorsque vous ajoutez un IdP à votre client d’application, vous pouvez générer des liens d’autorisation vers l’IdP et l’afficher sur votre page de connexion de l’interface utilisateur hébergée. Vous pouvez en attribuer plusieurs IdPs, mais vous devez en attribuer au moins une. Pour plus d'informations sur l'utilisation de l'externe IdPs, consultezAjout de la connexion du groupe d'utilisateurs via un tiers.

Portées OpenID Connect

Choisissez un ou plusieurs des paramètres scope OAuth suivants pour spécifier les privilèges d’accès qui peuvent être demandés pour les jetons d’accès.

  • La portée openid déclare que vous souhaitez récupérer un jeton d’identification et l’identifiant unique d’un utilisateur. Il demande également la totalité ou une partie des attributs utilisateur, en fonction des portées supplémentaires de la demande. Amazon Cognito ne renvoie pas de jeton d’identification à moins que vous ne demandiez la portée openid. La portée openid autorise les demandes de jetons d’identification structurels, telles que l’expiration et l’identifiant de clé, et détermine les attributs utilisateur que vous recevez dans une réponse du Point de terminaison UserInfo.

    • Si openid est la seule portée que vous demandez, Amazon Cognito remplit le jeton d’identification avec tous les attributs utilisateur que le client d’application actuel peut lire. La réponse userInfo à un jeton d’accès ayant cette portée seule renvoie tous les attributs utilisateur.

    • Lorsque vous demandez openid avec d’autres portées, telles que phone, email ou profile, le jeton d’identification et userInfo renvoient l’identifiant unique de l’utilisateur et les attributs définis par les portées supplémentaires.

  • Le paramètre scope phone accorde l’accès aux réclamations phone_number et phone_number_verified. Cette portée peut uniquement être demandée avec le paramètre scope openid.

  • Le paramètre scope email accorde l’accès aux réclamations email et email_verified. Cette portée peut uniquement être demandée avec le paramètre scope openid.

  • Le aws.cognito.signin.user.admin champ d'application autorise l'accès aux opérations de l'API des groupes d'utilisateurs Amazon Cognito qui nécessitent des jetons d'accès, tels que UpdateUserAttributeset. VerifyUserAttribute

  • Le paramètre scope profile accorde l’accès à tous les attributs utilisateurs pouvant être lus par le client. Cette portée peut uniquement être demandée avec le paramètre scope openid.

Pour plus d’informations sur les portées, consultez la liste des portées OIDC standard.

Types d’autorisations OAuth

Une autorisation OAuth est une méthode d’authentification qui récupère les jetons du groupe d’utilisateurs. Amazon Cognito prend en charge les types suivants d’autorisations. Pour intégrer ces autorisations OAuth dans votre application, vous devez ajouter un domaine à votre groupe d’utilisateurs.

Octroi de code d’autorisation

L’octroi du code d’autorisation génère un code que votre application peut échanger contre des jetons du groupe d’utilisateurs avec le Point de terminaison de jeton. Lorsque vous échangez un code d’autorisation, votre application reçoit des jetons d’ID, d’accès et d’actualisation. Ce flux OAuth, comme l’autorisation implicite, se produit dans les navigateurs de vos utilisateurs. L’attribution d’un code d’autorisation est l’autorisation la plus sécurisée proposée par Amazon Cognito, car les jetons ne sont pas visibles dans les sessions de vos utilisateurs. Au lieu de cela, votre application génère la demande qui renvoie des jetons et peut les mettre en cache dans un espace de stockage protégé. Pour plus d’informations, consultez le Code d’autorisation dans la norme IETF RFC 6749 #1.3.1.

Note

La bonne pratique de sécurité dans les applications public-client consiste à n’activer que le flux d’autorisation OAuth autorisation-code, et à mettre en œuvre Proof Key for Code Exchange (PKCE) pour restreindre l’échange de jetons. Avec PKCE, un client ne peut échanger un code d’autorisation que s’il a fourni au point de terminaison du jeton le même secret que celui présenté dans la demande d’authentification d’origine. Pour plus d’informations sur PKCE, consultez IETF RFC 7636.

Octroi implicite

L’autorisation implicite fournit un jeton d’accès et d’ID, mais pas un jeton d’actualisation, à la session de navigation de votre utilisateur directement depuis le Point de terminaison d’autorisation. Une autorisation implicite supprime l’obligation d’envoyer une demande séparée au point de terminaison du jeton, mais n’est pas compatible avec PKCE et ne renvoie pas de jetons d’actualisation. Cette autorisation prend en charge les scénarios de test et l’architecture d’applications qui ne peuvent pas compléter les autorisations autorisation-code. Pour en savoir plus, consultez Autorisation implicite dans IETF RFC 6749 #1.3.2. Vous pouvez activer à la fois l’autorisation autorisation-code et l’autorisation implicite dans un client d’application, puis utiliser chaque autorisation selon vos besoins.

Autorisation d’informations d’identification du client

Les informations d'identification du client sont accordées pour les communications machine-to-machine (M2M). Les autorisations autorisation-code et implicite émettent des jetons à des utilisateurs humains authentifiés. Les informations d’identification du client accordent une autorisation basée sur la portée pour une API à partir d’un système non interactif. Votre application peut demander les informations d’identification du client directement depuis le point de terminaison du jeton et recevoir un jeton d’accès. Pour plus d’informations, consultez Informations d’identification du client dans IETF RFC 6749 #1.3.4. Vous ne pouvez activer les autorisations client-informations d’identification que dans les clients d’application qui ont un secret client et qui ne prennent pas en charge les autorisations autorisation-code ou implicites.

Note

Comme vous n’invoquez pas le flux d’informations d’identification du client en tant qu’utilisateur, cette autorisation peut uniquement ajouter des portées personnalisées aux jetons d’accès. Une règle personnalisée est une règle que vous définissez pour votre propre serveur de ressources. Les portées par défaut comme openid et profile ne s’appliquent pas aux utilisateurs non humains.

Les jetons d’ID étant une validation des attributs utilisateur, ils ne sont pas pertinents pour les communications M2M, et les autorisations d’informations d’identification du client ne les délivrent pas. veuillez consulter Portées OAuth 2.0 et autorisation d'API avec des serveurs de ressources.

Création d’un client d’application

AWS Management Console
Pour créer un client d’application (console)
  1. Accédez à la console Amazon Cognito. Si vous y êtes invité, entrez vos AWS informations d'identification.

  2. Choisissez Groupes d’utilisateurs.

  3. Choisissez un groupe d’utilisateurs existant dans la liste ou créez-en un.

  4. Sélectionnez l’onglet Intégration d’applications.

  5. Sous Clients d’application, sélectionnez Créer un client d’application.

  6. Sélectionnez un type d’application :Client public, Client confidentiel ou Autre.

  7. Saisissez un nom de client d’application.

  8. Choisissez Générer un secret de client pour qu’Amazon Cognito génère un secret client pour vous. Les secrets des clients sont généralement associés à des clients confidentiels.

  9. Sélectionnez le flux d’authentification que vous souhaitez autoriser dans votre client d’application.

  10. Configuration deDurée de session du flux d’authentification. Il s’agit du temps dont disposent vos utilisateurs pour terminer chaque défi d’authentification avant l’expiration de leur jeton de session.

  11. (Facultatif) Effectuez les opérations suivantes si vous souhaitez configurer l’expiration du jeton :

    1. Spécifiez le délai d’expiration du jeton d’actualisation de l’application. La valeur par défaut est de 30 jours. Vous pouvez le remplacer par toute valeur comprise entre 1 heure et 10 ans.

    2. Spécifiez le délai d’expiration du jeton d’accès du client d’application. La valeur par défaut est 1 heure. Vous pouvez la remplacer par toute valeur comprise entre 5 minutes et 24 heures.

    3. Spécifiez le délai d’expiration du jeton d’identification du client d’application. La valeur par défaut est 1 heure. Vous pouvez la remplacer par toute valeur comprise entre 5 minutes et 24 heures.

      Important

      Si vous utilisez l’interface utilisateur hébergée et configurez des jetons de moins d’une heure, l’utilisateur final sera en mesure d’utiliser des jetons basés sur le cookie de sa session qui est actuellement fixée à une heure.

  12. Indiquez si vous voulez activer la révocation de jetons pour ce client d’application. Cela augmentera la taille des jetons émis par Amazon Cognito.

  13. Indiquez si vous voulez Empêcher les erreurs d’existence d’utilisateur pour ce client d’application. Amazon Cognito répondra aux demandes de connexion des utilisateurs inexistants avec un message générique indiquant que le nom d’utilisateur ou le mot de passe était incorrect.

  14. Si vous souhaitez utiliser l’interface utilisateur hébergée avec ce client d’application, configurez Paramètres de l’interface utilisateur hébergée.

    1. Saisissez une ou plusieurs URL de rappel autorisées. Il s’agit des URL web ou d’applications vers lesquelles vous souhaitez qu’Amazon Cognito redirige vos utilisateurs une fois leur authentification terminée.

    2. Saisissez une ou plusieurs URL de déconnexion autorisées. Il s’agit des URL que vous souhaitez que votre application accepte dans les demandes adressées àPoint de terminaison de déconnexion.

    3. Choisissez un ou plusieurs Fournisseurs d’identité que vous souhaitez autoriser à inscrire des utilisateurs pour votre application. Vous pouvez choisir n'importe quelle combinaison d'éléments existants IdPs. Vous pouvez authentifier les utilisateurs uniquement auprès de votre groupe d'utilisateurs ou auprès d'un ou de plusieurs tiers IdPs que vous avez configurés dans votre groupe d'utilisateurs.

    4. Choisissez les types d’octroi OAuth 2.0 que vous souhaitez que votre client d’application accepte.

      • Sélectionnez Octroi de code d’autorisation pour transmettre à votre application des codes qu’elle pourra échanger contre des jetons avec Point de terminaison de jeton.

      • Sélectionnez Octroi implicite pour transmettre l’ID et les jetons d’accès directement à votre application. Le flux d’octroi implicite expose les jetons directement à vos utilisateurs.

      • Sélectionnez Informations d’identification client pour transmettre des jetons d’accès à votre application en fonction de sa connaissance non pas des informations d’identification de l’utilisateur, mais du secret du client. Le flux d’octroi des informations d’identification du client s’exclut mutuellement du code d’autorisation et des flux d’octroi implicites.

    5. Sélectionnez les Portées OpenID Connect que vous souhaitez autoriser pour ce client d’application. Vous pouvez générer des jetons d’accès avec l’étendue aws.cognito.signin.user.admin via l’API des groupes d’utilisateurs uniquement. Pour des portées supplémentaires, vous devez demander vos jetons d’accès auprès de Point de terminaison de jeton.

    6. Sélectionnez les Portées personnalisées que vous souhaitez autoriser pour ce client d’application. Les portées personnalisées sont le plus souvent utilisées pour autoriser l’accès à des API tierces.

  15. Configurez Autorisations de lecture et d’écriture pour les attributs pour ce client d’application. Votre client d’application peut être autorisé à lire et à écrire tout ou un sous-ensemble limité du schéma d’attribut de votre groupe d’utilisateurs.

  16. Choisissez Créer un client d’application.

  17. Notez l’ID du client. Cela permettra d’identifier le client de l’application lors des demandes d’inscription et de connexion.

AWS CLI
aws cognito-idp create-user-pool-client --user-pool-id MyUserPoolID --client-name myApp
Note

Utilisez le format JSON pour les URL de rappel et de déconnexion afin d’empêcher la CLI de les traiter comme des fichiers de paramètre à distance :

--callback-urls "["https://example.com"]" --logout-urls "["https://example.com"]"

Consultez la référence des AWS CLI commandes pour plus d'informations : create-user-pool-client

Amazon Cognito user pools API

Générez une demande d'CreateUserPoolClientAPI. Vous devez spécifier une valeur pour tous les paramètres auxquels vous ne voulez pas attribuer une valeur par défaut.

Mettre à jour un client d'application de groupe d'utilisateurs (AWS CLI et une AWS API)

Au niveau de AWS CLI, entrez la commande suivante :

aws cognito-idp update-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID" --allowed-o-auth-flows-user-pool-client --allowed-o-auth-flows "code" "implicit" --allowed-o-auth-scopes "openid" --callback-urls "["https://example.com"]" --supported-identity-providers "["MySAMLIdP", "LoginWithAmazon"]"

Si la commande aboutit, elle AWS CLI renvoie une confirmation :

{ "UserPoolClient": { "ClientId": "MyClientID", "SupportedIdentityProviders": [ "LoginWithAmazon", "MySAMLIdP" ], "CallbackURLs": [ "https://example.com" ], "AllowedOAuthScopes": [ "openid" ], "ClientName": "Example", "AllowedOAuthFlows": [ "implicit", "code" ], "RefreshTokenValidity": 30, "AuthSessionValidity": 3, "CreationDate": 1524628110.29, "AllowedOAuthFlowsUserPoolClient": true, "UserPoolId": "MyUserPoolID", "LastModifiedDate": 1530055177.553 } }

Consultez la référence des AWS CLI commandes pour plus d'informations : update-user-pool-client.

AWS API : UpdateUserPoolClient

Obtenir des informations sur un client d'application de groupe d'utilisateurs (AWS CLI et une AWS API)

aws cognito-idp describe-user-pool-client --user-pool-id MyUserPoolID --client-id MyClientID

Consultez la référence des AWS CLI commandes pour plus d'informations : describe-user-pool-client.

AWS API : DescribeUserPoolClient

Répertorier toutes les informations du client de l'application dans un pool d'utilisateurs (AWS CLI et une AWS API)

aws cognito-idp list-user-pool-clients --user-pool-id "MyUserPoolID" --max-results 3

Consultez la référence des AWS CLI commandes pour plus d'informations : list-user-pool-clients.

AWS API : ListUserPoolClients

Supprimer un client d'application de groupe d'utilisateurs (AWS CLI et une AWS API)

aws cognito-idp delete-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID"

Consultez la référence des AWS CLI commandes pour plus d'informations : delete-user-pool-client

AWS API : DeleteUserPoolClient