Paramètres spécifiques à l'application avec les clients d'applications - 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.

Paramètres spécifiques à l'application avec les clients d'applications

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 tout client IDs ou secret d'application afin que seules les applications clientes autorisées puissent effectuer 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.

Vous pouvez appliquer des paramètres pour les fonctionnalités du groupe d'utilisateurs suivantes au niveau du client de l'application :

Types de client d’application

Lorsque vous créez un client d'application dans Amazon Cognito, vous pouvez prérenseigner les options en fonction des types de OAuth clients 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.

Note

La console Amazon Cognito crée des clients d'applications avec des secrets clients lorsque vous sélectionnez les options Application Web traditionnelle et application M achine-to-machine pour le type d'application. Choisissez l'une de ces options pour générer un secret client, ou créez le client par programmation avec CreateUserPoolClientet GenerateSecret définissez-le sur. true

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 (JWTs) des 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 la version 2.0. OAuth 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 Comprendre le jeton d'identité (ID).

Jeton d’accès

Une déclaration vérifiable des droits d’accès de vos utilisateurs. Le jeton d'accès contient des étendues, une fonctionnalité de l'OIDC et OAuth de la version 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 Comprendre le 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 Comprendre le jeton d'actualisation.

Vous pouvez définir l'expiration de ces jetons pour chaque client d'application depuis le menu Clients d'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.

Rappel autorisé URLs

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.

Voir 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 rappels d'applications URLs tels que myapp://example sont également pris en charge.

Déconnexion autorisée URLs

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 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. Le client de votre application peut écrire des valeurs dans des attributs immuables 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, e-mail et SMS OTPs, les authentificateurs par clé d'accès, l'authentification personnalisée avec des déclencheurs Lambda et l'actualisation des jetons. En tant que meilleure pratique de sécurité, utilisez l'authentification SRP pour l'authentification par nom d'utilisateur et mot de passe dans les applications personnalisées.

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 estresource-server-identifier/scope. Consultez Éscopes, M2M et APIs avec 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 rappels URLs sont définis. 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 un rappel est URLs défini. 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 les afficher sur votre page de connexion géré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, consultezConnexion au groupe d'utilisateurs avec des fournisseurs d'identité 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.

OAuth types de subventions

Une OAuth subvention est une méthode d'authentification qui permet de récupérer les jetons du pool d'utilisateurs. Amazon Cognito prend en charge les types suivants d’autorisations. Pour intégrer ces OAuth autorisations 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 OAuth flux, 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

En tant que meilleure pratique de sécurité dans les applications clientes publiques, activez uniquement le OAuth flux d'octroi de code d'autorisation et implémentez 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. Consultez Éscopes, M2M et APIs avec serveurs de ressources.

Les informations d'identification des clients vous permettent d'ajouter des frais à votre AWS facture. Pour plus d’informations, consultez Tarification d’Amazon Cognito.

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. Les deux options vous invitent à configurer un client d'application avec des paramètres spécifiques à l'application.

  4. Choisissez un type d'application qui reflète l'architecture de votre application.

  5. Nommez votre application à l'aide d'un identifiant convivial.

  6. Entrez une URL de retour.

  7. Choisissez Créer un client d’application. Vous pouvez modifier les options avancées après avoir créé votre client d'application.

  8. Amazon Cognito vous renvoie aux informations du client de l'application. Pour accéder à un exemple de code pour votre application, sélectionnez une plate-forme dans l'onglet Guide de configuration rapide.

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

Utilisez le format JSON pour le rappel et la déconnexion afin URLs d'empêcher la CLI de les traiter comme des fichiers de paramètres distants :

--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