

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.

# Choisissez un flux d'authentification Amazon Cognito pour les applications d'entreprise
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications"></a>

*Michael Daehnert et Fabian Jahnke, Amazon Web Services*

## Résumé
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-summary"></a>

[Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) assure l'authentification, l'autorisation et la gestion des utilisateurs pour les applications Web et mobiles. Il offre des fonctionnalités avantageuses pour l'authentification des identités fédérées. Pour le rendre opérationnel, les architectes techniques doivent décider de la manière dont ils souhaitent utiliser ces fonctionnalités.

Amazon Cognito prend en charge plusieurs flux pour les demandes d'authentification. Ces flux définissent la manière dont vos utilisateurs peuvent vérifier leur identité. Le choix du flux d'authentification à utiliser dépend des exigences spécifiques de votre application et peut s'avérer complexe. Ce modèle vous aide à choisir le flux d'authentification le mieux adapté à votre application d'entreprise. Il suppose que vous avez déjà une connaissance de base d'Amazon Cognito, d'OpenID Connect (OIDC) et de la fédération, et il vous explique en détail les différents flux d'authentification fédérés.

Cette solution est destinée aux décideurs techniques. Il vous aide à comprendre les différents flux d'authentification et à les adapter aux exigences de votre application. Les responsables techniques doivent recueillir les informations nécessaires pour démarrer les intégrations avec Amazon Cognito. Étant donné que les entreprises se concentrent principalement sur la fédération SAML, ce modèle inclut des descriptions des groupes d'[utilisateurs Amazon Cognito dotés](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) de la fédération SAML.

## Conditions préalables et limitations
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Rôles et autorisations AWS Identity and Access Management (IAM) avec accès complet à Amazon Cognito
+ (Facultatif) Accès à votre fournisseur d'identité (IdP), tel que Microsoft Entra ID, Active Directory Federation Service (AD FS) ou Okta
+ Un haut niveau d'expertise pour votre application
+ Connaissances de base d'Amazon Cognito, d'OpenID Connect (OIDC) et de la fédération

**Limites**
+ Ce modèle se concentre sur les groupes d'utilisateurs et les fournisseurs d'identité Amazon Cognito. Pour plus d'informations sur les groupes d'identités Amazon Cognito, consultez la section [Informations supplémentaires](#choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-additional).

## Architecture
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-architecture"></a>

Utilisez le tableau suivant pour vous aider à choisir un flux d'authentification. Plus d'informations sur chaque flux sont fournies dans cette section.


| 
| 
| Avez-vous besoin d'une machine-to-machine authentification ? | Votre application est-elle une application Web dont le frontend est affiché sur le serveur ? | Votre application est-elle une application monopage (SPA) ou une application frontale mobile ? | Votre application nécessite-t-elle des jetons d'actualisation pour une fonctionnalité « Maintenez-moi connecté » ? | Le frontend propose-t-il un mécanisme de redirection basé sur le navigateur ? | Flux Amazon Cognito recommandé | 
| --- |--- |--- |--- |--- |--- |
| Oui | Non | Non | Non | Non | Flux d'informations d'identification du client | 
| Non | Oui | Non | Oui | Oui | Flux de code d'autorisation | 
| Non | Non | Oui | Oui | Oui | Flux de code d'autorisation avec clé de preuve pour l'échange de code (PKCE) | 
| Non | Non | Non | Non | Non | Flux de mots de passe du propriétaire des ressources | 

\* Le flux de mots de passe du propriétaire de la ressource ne doit être utilisé qu'en cas d'absolue nécessité. Pour plus d'informations, consultez la section relative au *flux de mots de passe du propriétaire de la ressource* dans ce modèle.

**Flux d'informations d'identification du client**

Le flux d'informations d'identification du client est le plus court des flux Amazon Cognito. Il doit être utilisé si les systèmes ou les services communiquent entre eux sans aucune interaction de l'utilisateur. Le système demandeur utilise l'ID client et le secret du client pour récupérer un jeton d'accès. Étant donné que les deux systèmes fonctionnent sans interaction avec l'utilisateur, aucune étape de consentement supplémentaire n'est requise.

![Flux d'informations d'identification client pour Amazon Cognito](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/7b5e567c-66a4-4386-a1f6-616ed77a6211/images/1138745d-69fa-4ecc-a9ec-c0b2a68ce7d2.png)


Le diagramme illustre les éléments suivants :

1. L'application 1 envoie une demande d'authentification avec l'ID client et le secret du client au point de terminaison Amazon Cognito, et elle récupère un jeton d'accès.

1. L'application 1 utilise ce jeton d'accès pour chaque appel suivant à l'application 2.

1. L'application 2 valide le jeton d'accès avec Amazon Cognito.

Ce flux doit être utilisé :
+ Pour les communications entre applications sans interaction avec l'utilisateur

Ce flux ne doit pas être utilisé :
+ Pour toute communication dans laquelle des interactions avec les utilisateurs sont possibles

**Flux de code d'autorisation**

Le flux de code d'autorisation est destiné à l'authentification Web classique. Dans ce flux, le backend gère tous les échanges et le stockage des jetons. Le client basé sur un navigateur ne voit pas les jetons réels. Cette solution est utilisée pour les applications écrites dans des frameworks tels que .NET Core, Jakarta Faces ou Jakarta Server Pages (JSP).

Le flux de code d'autorisation est un flux basé sur la redirection. Le client doit être en mesure d'interagir avec le navigateur Web ou un client similaire. Le client est redirigé vers un serveur d'authentification et s'authentifie auprès de ce serveur. Si le client s'authentifie correctement, il est redirigé vers le serveur.

![Flux de code d'autorisation pour Amazon Cognito](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/7b5e567c-66a4-4386-a1f6-616ed77a6211/images/1008296c-d5b8-449d-99d4-f0b2b7cf5d80.png)


Le diagramme illustre les éléments suivants :

1. Le client envoie une demande au serveur Web.

1. Le serveur Web redirige le client vers Amazon Cognito à l'aide d'un code d'état HTTP 302. Le client suit automatiquement cette redirection vers le login IdP configuré.

1. L'IdP vérifie s'il existe une session de navigateur existante du côté de l'IdP. S'il n'en existe aucun, l'utilisateur est invité à s'authentifier en fournissant son nom d'utilisateur et son mot de passe. L'IdP envoie un jeton SAML à Amazon Cognito.

1. Amazon Cognito fonctionne avec un jeton Web JSON (JWT), en particulier un jeton de code. Le serveur Web appelle /oauth2/token pour échanger le jeton de code contre un jeton d'accès. Le serveur Web envoie l'ID client et le secret du client à Amazon Cognito pour validation.

1. Le jeton d'accès est utilisé pour chaque appel ultérieur à d'autres applications.

1. D'autres applications valident le jeton d'accès avec Amazon Cognito.

Ce flux doit être utilisé :
+ Si l'utilisateur est en mesure d'interagir avec le navigateur Web ou le client. Le code de l'application est exécuté et affiché sur le serveur pour s'assurer qu'aucun secret n'est exposé au navigateur.

Ce flux ne doit pas être utilisé :
+ Pour les applications d'une seule page (SPAs) ou les applications mobiles, car elles sont affichées sur le client et ne doivent pas utiliser les secrets du client.

**Flux de code d'autorisation avec PKCE**

Le flux de code d'autorisation avec clé de preuve pour l'échange de code (PKCE) doit être utilisé pour les applications d'une seule page et les applications mobiles. Il est le successeur du flux implicite et est plus sécurisé car il utilise le protocole PKCE. PKCE est une extension de l'octroi de code d'autorisation OAuth 2.0 pour les clients publics. Le PKCE protège contre le rachat de codes d'autorisation interceptés.

![Flux de code d'autorisation avec PKCE pour Amazon Cognito](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/7b5e567c-66a4-4386-a1f6-616ed77a6211/images/1609da4f-decd-4d43-afe0-31237238df6d.png)


Le diagramme illustre les éléments suivants :

1. L'application crée un vérificateur de code et un défi de code. Il s'agit de valeurs uniques bien définies qui sont envoyées à Amazon Cognito pour référence future.

1. L'application appelle le point de terminaison /oauth2/authorization d'Amazon Cognito. Il redirige automatiquement l'utilisateur vers le login IdP configuré.

1. L'IdP vérifie la présence d'une session existante. S'il n'en existe aucun, l'utilisateur est invité à s'authentifier en fournissant son nom d'utilisateur et son mot de passe. L'IdP envoie un jeton SAML à Amazon Cognito.

1. Une fois qu'Amazon Cognito a renvoyé un jeton de code avec succès, le serveur Web appelle /oauth2/token pour échanger le jeton de code contre un jeton d'accès.

1. Le jeton d'accès est utilisé pour chaque appel ultérieur à d'autres applications.

1. Les autres applications valident le jeton d'accès avec Amazon Cognito.

Ce flux doit être utilisé :
+ Pour SPAs nos applications mobiles

Ce flux ne doit pas être utilisé :
+ Si le backend de l'application gère l'authentification

**Flux de mots de passe du propriétaire des ressources**

Le flux de mots de passe du propriétaire de la ressource est destiné aux applications ne disposant pas de fonctionnalités de redirection. Il est construit en créant un formulaire de connexion dans votre propre application. La connexion est vérifiée sur Amazon Cognito via un appel de CLI ou de SDK au lieu de s'appuyer sur des flux de redirection. La fédération n'est pas possible dans ce flux d'authentification car la fédération nécessite des redirections basées sur le navigateur.

![Flux de mots de passe du propriétaire de la ressource pour Amazon Cognito](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/7b5e567c-66a4-4386-a1f6-616ed77a6211/images/d74bc596-08a3-40f4-a6a7-07f6610fe6b1.png)


Le diagramme illustre les éléments suivants :

1. L'utilisateur saisit ses informations d'identification sur un formulaire de connexion fourni par l'application.

1. L'interface de ligne de commande AWS (AWS CLI) appelle Amazon [admin-initiated-auth](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cognito-idp/admin-initiate-auth.html)Cognito.
**Note**  
Vous pouvez également utiliser AWS SDKs au lieu de l'AWS CLI.

1. Amazon Cognito renvoie un jeton d'accès.

1. Le jeton d'accès est utilisé pour chaque appel ultérieur à d'autres applications.

1. Les autres applications valident le jeton d'accès avec Amazon Cognito.

Ce flux doit être utilisé :
+ Lors de la migration de clients existants qui utilisent une logique d'authentification directe (telle que l'authentification d'accès de base ou l'authentification d'accès OAuth par condensé) en convertissant les informations d'identification stockées en jeton d'accès

Ce flux ne doit pas être utilisé :
+ Si vous souhaitez utiliser des identités fédérées
+ Si votre application prend en charge les redirections

## Outils
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-tools"></a>

**Services AWS**
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fournit des fonctionnalités d'authentification, d'autorisation et de gestion des utilisateurs pour les applications Web et mobiles.

**Autres outils**
+ Le [débogueur de jetons Web JSON (JWT)](https://jwt.io/) est un outil de validation JWT basé sur le Web.

## Épopées
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-epics"></a>

### Évaluez votre candidature
<a name="assess-your-application"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Définissez les exigences en matière d'authentification. | Évaluez votre application en fonction de vos exigences d'authentification spécifiques. | Développeur d'applications, architecte d'applications | 
| Alignez les exigences avec les flux d'authentification. | Dans la section [Architecture](#choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-architecture), utilisez le tableau de décision et les explications de chaque flux pour choisir votre flux d'authentification Amazon Cognito. | Développeur d'applications, AWS général, architecte d'applications | 

### Configuration du groupe d'utilisateurs Amazon Cognito
<a name="set-up-the-amazon-cognito-user-pool"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un groupe d'utilisateurs. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/choose-an-amazon-cognito-authentication-flow-for-enterprise-applications.html) | AWS général | 
| (Facultatif) Configurez un fournisseur d'identité. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/choose-an-amazon-cognito-authentication-flow-for-enterprise-applications.html) | AWS général, administrateur de la fédération | 
| Créez un client d'application. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/choose-an-amazon-cognito-authentication-flow-for-enterprise-applications.html) | AWS général | 

### Intégrer l'application à Amazon Cognito
<a name="integrate-the-application-with-amazon-cognito"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Détails de l'intégration d'Exchange Amazon Cognito. | En fonction de votre flux d'authentification, partagez les informations Amazon Cognito avec l'application, telles que l'identifiant du groupe d'utilisateurs et l'identifiant du client de l'application. | Développeur d'applications, AWS général | 
| Implémentez l'authentification Amazon Cognito. | Cela dépend du flux d'authentification que vous avez choisi, de votre langage de programmation et des frameworks que vous utilisez. Pour certains liens permettant de démarrer, consultez la section [Ressources connexes](#choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-resources). | Développeur d’applications | 

## Ressources connexes
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-resources"></a>

**Documentation AWS**
+ [Flux d'authentification du groupe d'utilisateurs](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html)
+ [Vérification d'un jeton Web JSON](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html)
+ [Accédez aux services AWS depuis une application ASP.NET Core à l'aide des pools d'identités Amazon Cognito](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-aws-services-from-an-asp-net-core-app-using-amazon-cognito-identity-pools.html?did=pg_card&trk=pg_card)
+ Cadres et SDKs :
  + [Authentification Amazon Amplify](https://docs.amplify.aws/lib/auth/getting-started/q/platform/js)
  + [Exemples de fournisseurs d'identité Amazon Cognito (documentation](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/java_cognito-identity-provider_code_examples.html) du kit SDK AWS pour Java 2.x)
  + [Authentification des utilisateurs avec Amazon](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/cognito-apis-intro.html) Cognito (documentation du kit SDK AWS pour .NET)

**Articles de blog AWS**
+ [Authorization @Edge à l'aide de cookies : protégez votre CloudFront contenu Amazon contre le téléchargement par des utilisateurs non authentifiés](https://aws.amazon.com/blogs/networking-and-content-delivery/authorizationedge-using-cookies-protect-your-amazon-cloudfront-content-from-being-downloaded-by-unauthenticated-users/)
+ [Création d'une fédération AD FS pour votre application Web à l'aide des groupes d'utilisateurs Amazon Cognito](https://aws.amazon.com/blogs/mobile/building-adfs-federation-for-your-web-app-using-amazon-cognito-user-pools/)

**Partenaires de mise en œuvre**
+ [Partenaires AWS pour les solutions d'authentification](https://partners.amazonaws.com/search/partners?keyword=authentication)

## Informations supplémentaires
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-additional"></a>

**FAQ**

*Pourquoi le flux implicite est-il obsolète ?*

Depuis la sortie du [framework OAuth 2.1](https://oauth.net/2.1/), le flux implicite est marqué comme obsolète pour des raisons de sécurité. Comme alternative, veuillez utiliser le flux de code d'autorisation avec PKCE décrit dans la section [Architecture](#choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-architecture).

*Et si Amazon Cognito ne propose pas certaines fonctionnalités dont j'ai besoin ?*

Les partenaires AWS proposent différentes intégrations pour les solutions d'authentification et d'autorisation. Pour plus d'informations, consultez la section [Partenaires AWS pour les solutions d'authentification](https://partners.amazonaws.com/search/partners?keyword=authentication).

*Qu'en est-il des flux du pool d'identités Amazon Cognito ?*

Les groupes d'utilisateurs et les identités fédérées Amazon Cognito sont destinés à l'authentification. Les groupes d'identités Amazon Cognito sont utilisés pour autoriser l'accès aux ressources AWS en demandant des informations d'identification AWS temporaires. L'échange de jetons d'identification et de jetons d'accès pour les pools d'identités n'est pas abordé dans ce modèle. Pour plus d'informations, consultez [Quelle est la différence entre les groupes d'utilisateurs et les groupes d'identités Amazon Cognito et Scénarios](https://aws.amazon.com/premiumsupport/knowledge-center/cognito-user-pools-identity-pools/) [Amazon Cognito courants](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-scenarios.html).

**Étapes suivantes**

Ce modèle fournit une vue d'ensemble des flux d'authentification Amazon Cognito. L'étape suivante consiste à choisir l'implémentation détaillée du langage de programmation de l'application. Plusieurs langages SDKs et frameworks que vous pouvez utiliser avec Amazon Cognito. Pour des références utiles, consultez la section [Ressources connexes](#choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-resources).