Configuration d'un OIDC fournisseur en tant qu'IdP de pool d'identités - 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.

Configuration d'un OIDC fournisseur en tant qu'IdP de pool d'identités

OpenID Connect est une norme ouverte d'authentification que de nombreux fournisseurs de connexion prennent en charge. Avec Amazon Cognito, vous pouvez associer des identités aux fournisseurs OpenID Connect par le biais desquels vous les configurez. AWS Identity and Access Management

Ajout d'un fournisseur OpenID Connect

Pour plus d'informations sur la création d'un fournisseur OpenID Connect, consultez la section Création de fournisseurs d'identité OpenID Connect (OIDC) dans le guide de l'utilisateur.AWS Identity and Access Management

Association d'un fournisseur à Amazon Cognito

Pour ajouter un fournisseur OIDC d'identité (IdP)
  1. Choisissez Groupes d'identités dans la console Amazon Cognito. Sélectionnez une réserve d'identités.

  2. Choisissez l'onglet Accès utilisateur.

  3. Sélectionnez Ajouter un fournisseur d'identité.

  4. Choisissez OpenID Connect () OIDC.

  5. Choisissez un fournisseur d'OIDCidentité IAM IdPs dans votre Compte AWS. Si vous souhaitez ajouter un nouveau SAML fournisseur, choisissez Create new provider pour accéder à la IAM console.

  6. Pour définir le rôle demandé par Amazon Cognito lorsqu'il délivre des informations d'identification aux utilisateurs qui se sont authentifiés auprès de ce fournisseur, configurez Paramètres de rôle.

    1. Vous pouvez attribuer aux utilisateurs de ce fournisseur d'identité le rôle par défaut que vous avez configuré lorsque vous avez configuré votre rôle authentifié, ou vous pouvez sélectionner Choisir un rôle avec des règles.

      1. Si vous avez choisi Choisir un rôle avec des règles, saisissez la demande source issue de l'authentification de votre utilisateur, l'opérateur avec lequel vous souhaitez comparer ce champ standard, la valeur qui entraînera une correspondance avec ce choix de rôle et le rôle que vous souhaitez attribuer si l'attribution de rôle correspond. Sélectionnez Ajouter un autre pour créer une règle supplémentaire basée sur une condition différente.

      2. Choisissez une résolution de rôle. Lorsque les champs standard de votre utilisateur ne correspondent pas à vos règles, vous pouvez refuser les informations d'identification ou émettre des informations d'identification pour votre rôle authentifié.

  7. Pour modifier les balises de principal qu'Amazon Cognito attribue lorsqu'il délivre des informations d'identification aux utilisateurs qui se sont authentifiés auprès de ce fournisseur, configurez Attributs de contrôle d'accès.

    1. Pour n'appliquer aucune balise de principal, choisissez Inactif.

    2. Pour appliquer les balises de principal en fonction des champs standard sub et aud, choisissez Utiliser les mappages par défaut.

    3. Pour créer votre propre schéma personnalisé d'attributs pour les balises de principal, choisissez Utiliser des mappages personnalisés. Saisissez ensuite une clé de balise que vous souhaitez obtenir à partir de chaque demande que vous souhaitez représenter dans une balise.

  8. Sélectionnez Enregistrer les modifications.

Vous pouvez associer plusieurs fournisseurs OpenID Connect à un seul groupe d'identités.

Utilisation d'OpenID Connect

Reportez-vous à la documentation de votre fournisseur pour découvrir comment vous connecter et recevoir un jeton d'identification.

Une fois que vous avez un jeton, ajoutez-le au mappage des connexions. Utilisez le URI code de votre fournisseur comme clé.

Validation d'un jeton OpenID Connect

Lors de l'intégration initiale avec Amazon Cognito, vous pouvez recevoir une exception InvalidToken. Il est important de comprendre comment Amazon Cognito valide les jetons OpenID Connect OIDC ().

Note

Comme indiqué ici (https://tools.ietf.org/html/rfc7523), Amazon Cognito fournit une période de grâce de 5 minutes pour gérer tout décalage d'horloge entre les systèmes.

  1. Le paramètre iss doit correspondre à la clé utilisée dans le mappage des connexions (par exemple, login.provider.com).

  2. La signature doit être valide. La signature doit être vérifiable à l'aide d'une clé RSA publique.

  3. L'empreinte de la clé publique du certificat correspond à l'empreinte que vous avez définie IAM lors de la création de votre OIDC fournisseur.

  4. Si le azp paramètre est présent, vérifiez cette valeur par rapport IDs au client répertorié dans votre OIDC fournisseur.

  5. Si le azp paramètre n'est pas présent, vérifiez-le par rapport au aud client répertorié IDs dans votre OIDC fournisseur.

Le site web jwt.io est une ressource précieuse que vous pouvez utiliser pour décoder les jetons et vérifier ces valeurs.

Android

Map<String, String> logins = new HashMap<String, String>(); logins.put("login.provider.com", token); credentialsProvider.setLogins(logins);

iOS : Objective-C

credentialsProvider.logins = @{ "login.provider.com": token }

iOS : Swift

Pour fournir le jeton OIDC d'identification à Amazon Cognito, implémentez le AWSIdentityProviderManager protocole.

Lorsque vous implémentez la logins méthode, renvoyez un dictionnaire contenant le nom du OIDC fournisseur que vous avez configuré. Ce dictionnaire fait office de clé et le jeton d'identification actuel de l'utilisateur authentifié fait office de valeur, comme dans l'exemple de code suivant.

class OIDCProvider: NSObject, AWSIdentityProviderManager { func logins() -> AWSTask<NSDictionary> { let completion = AWSTaskCompletionSource<NSString>() getToken(tokenCompletion: completion) return completion.task.continueOnSuccessWith { (task) -> AWSTask<NSDictionary>? in //login.provider.name is the name of the OIDC provider as setup in the Amazon Cognito console return AWSTask(result:["login.provider.name":task.result!]) } as! AWSTask<NSDictionary> } func getToken(tokenCompletion: AWSTaskCompletionSource<NSString>) -> Void { //get a valid oidc token from your server, or if you have one that hasn't expired cached, return it //TODO code to get token from your server //... //if error getting token, set error appropriately tokenCompletion.set(error:NSError(domain: "OIDC Login", code: -1 , userInfo: ["Unable to get OIDC token" : "Details about your error"])) //else tokenCompletion.set(result:"result from server id token") } }

Lorsque vous instanciez leAWSCognitoCredentialsProvider, transmettez la classe qui implémente AWSIdentityProviderManager comme valeur de identityProviderManager dans le constructeur. Pour plus d'informations, rendez-vous sur AWSCognitoCredentialsProviderpage de référence et choisissez initWithRegionType : identityPoolId : identityProviderManager.

JavaScript

AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { 'login.provider.com': token } });

Unity

credentials.AddLogin("login.provider.com", token);

Xamarin

credentials.AddLogin("login.provider.com", token);