

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 de Facebook en tant qu'IdP de pool d'identités
<a name="facebook"></a>

Les pools d'identités Amazon Cognito fonctionnent avec Facebook pour fournir une authentification fédérée aux utilisateurs de votre application. Cette section explique comment enregistrer et configurer votre application avec Facebook comme fournisseur d'identité.

## Configuration de Facebook
<a name="set-up-facebook"></a>

Enregistrez votre application auprès de Facebook avant d'authentifier les utilisateurs de Facebook et d'interagir avec Facebook APIs.

Le [portail des développeurs Facebook](https://developers.facebook.com/) vous aide à configurer votre application. Procédez comme suit avant d'intégrer Facebook dans votre groupe d'identités Amazon Cognito :

**Note**  
La fédération des groupes d'identités Amazon Cognito n'est pas compatible avec [Facebook Limited Login](https://developers.facebook.com/docs/facebook-login/limited-login). Pour plus d'informations sur la façon de configurer la connexion à Facebook pour iOS sans dépasser les autorisations définies pour la connexion limitée, voir Connexion à [Facebook pour iOS - Démarrage rapide](https://developers.facebook.com/docs/facebook-login/ios) sur *Meta pour les développeurs*.

**Configuration de Facebook**

1. Sur le [portail des développeurs Facebook](https://developers.facebook.com/), connectez-vous avec vos informations d'identification Facebook.

1. Dans le menu **Apps (Applications)**, sélectionnez **Add a New App (Ajouter une nouvelle application)**.

1. Sélectionnez une plateforme et terminer le processus de démarrage rapide.

### Android
<a name="set-up-facebook-1.android"></a>

Pour plus d'informations sur la façon d'intégrer des applications Android avec Facebook Login, consultez le [Guide de démarrage Facebook](https://developers.facebook.com/docs/android/getting-started).

### iOS : Objective-C
<a name="set-up-facebook-1.ios-objc"></a>

Pour plus d'informations sur la façon d'intégrer des applications iOS Objective-C avec Facebook Login, consultez le [Guide de démarrage Facebook](https://developers.facebook.com/docs/ios/getting-started/).

### iOS : Swift
<a name="set-up-facebook-1.ios-swift"></a>

Pour plus d'informations sur la façon d'intégrer des applications iOS Swift avec Facebook Login, consultez le [Guide de démarrage Facebook](https://developers.facebook.com/docs/ios/getting-started/).

### JavaScript
<a name="set-up-facebook-1.javascript"></a>

Pour plus d'informations sur la façon d'intégrer des applications JavaScript Web à Facebook Login, consultez le [guide de démarrage de Facebook](https://developers.facebook.com/docs/facebook-login/login-flow-for-web/v2.3).

## Configuration d'un fournisseur d'identité dans la console des réserves d'identités Amazon Cognito
<a name="configure-the-external-provider-in-the-amazon-cognito-console"></a>

Utilisez la procédure suivante pour configurer votre fournisseur d'identité.

**Pour ajouter un fournisseur d'identité (IdP) Facebook**

1. Choisissez **Groupes d'identités** dans la [console Amazon Cognito](https://console.aws.amazon.com/cognito/home). Sélectionnez une réserve d'identités.

1. Choisissez l'onglet **Accès utilisateur**.

1. Sélectionnez **Ajouter un fournisseur d'identité**.

1. Choisissez **Facebook**.

1. Entrez l'**ID d'application** du OAuth projet que vous avez créé sur [Meta for Developers](https://developers.facebook.com/). Pour plus d'informations, consultez [Facebook Login](https://developers.facebook.com/docs/facebook-login/) (langue française non garantie) dans la *documentation de Meta for Developers*.

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

     1. 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é**.

1. 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**.

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

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

1. Cliquez sur **Enregistrer les modifications**.

## Utilisation de Facebook
<a name="using-facebook"></a>

### Android
<a name="using-facebook-1.android"></a>

Pour ajouter l'authentification Facebook, commencez par suivre le [Guide Facebook](https://developers.facebook.com/docs/android) afin d'intégrer le kit SDK Facebook à votre application. Ajoutez ensuite un [bouton **Login with Facebook** (Se connecter avec Facebook)](https://developers.facebook.com/docs/facebook-login/android) dans votre interface utilisateur Android. Le kit SDK Facebook utilise un objet session pour suivre son état. Amazon Cognito utilise le jeton d'accès de cet objet de session pour authentifier l'utilisateur, générer l'identifiant unique et, si nécessaire, accorder à l'utilisateur l'accès à d'autres ressources. AWS 

Après avoir authentifié votre utilisateur avec le kit SDK Facebook, ajoutez le jeton de session au fournisseur d'informations d'identification Amazon Cognito.

Kit SDK Facebook 4.0 ou version ultérieure :

```
Map<String, String> logins = new HashMap<String, String>();
logins.put("graph.facebook.com", AccessToken.getCurrentAccessToken().getToken());
credentialsProvider.setLogins(logins);
```

Kit SDK Facebook avant la version 4.0 :

```
Map<String, String> logins = new HashMap<String, String>();
logins.put("graph.facebook.com", Session.getActiveSession().getAccessToken());
credentialsProvider.setLogins(logins);
```

Le processus de connexion Facebook initialise une session singleton dans son kit SDK. L'objet de session Facebook contient un OAuth jeton qu'Amazon Cognito utilise pour générer des AWS informations d'identification pour votre utilisateur final authentifié. Amazon Cognito utilise également ce jeton pour rechercher dans votre base de données utilisateur l'existence d'un utilisateur qui correspond à cette identité Facebook particulière. Si l'utilisateur existe déjà, l'API renvoie l'identifiant correspondant. Dans le cas contraire, elle renvoie un nouvel identifiant. Les identifiants sont automatiquement mis en cache par le kit SDK client sur l'appareil local.

**Note**  
Après avoir défini le mappage des connexions, appelez `refresh` ou récupérez `get` les AWS informations d'identification.

### iOS : Objective-C
<a name="using-facebook-1.ios-objc"></a>

Pour ajouter l'authentification Facebook, commencez par suivre le [Guide Facebook](https://developers.facebook.com/docs/ios) afin d'intégrer le kit SDK Facebook à votre application. Ajoutez ensuite un [bouton « Login with Facebook »](https://developers.facebook.com/docs/facebook-login/ios) à votre interface utilisateur Le kit SDK Facebook utilise un objet session pour suivre son état. Amazon Cognito utilise le jeton d'accès de cet objet session pour authentifier l'utilisateur et le lier à un groupe d'identités Amazon Cognito (Identités fédérées) unique.

Pour fournir le jeton d'accès Facebook à Amazon Cognito, implémentez le protocole [https://github.com/aws-amplify/aws-sdk-ios](https://github.com/aws-amplify/aws-sdk-ios).

Quand vous implémentez la méthode `logins`, renvoyez un dictionnaire contenant `AWSIdentityProviderFacebook`. Ce dictionnaire fait office de clé et le jeton d'accès actuel de l'utilisateur Facebook authentifié fait office de valeur, comme dans l'exemple de code suivant.

```
- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins {
    FBSDKAccessToken* fbToken = [FBSDKAccessToken currentAccessToken];
    if(fbToken){
        NSString *token = fbToken.tokenString;
        return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : token }];
    }else{
            return [AWSTask taskWithError:[NSError errorWithDomain:@"Facebook Login"
                                                          code:-1
                                                      userInfo:@{@"error":@"No current Facebook access token"}]];
    }
}
```

Lorsque vous instanciez `AWSCognitoCredentialsProvider`, transmettez la classe qui implémente `AWSIdentityProviderManager` comme valeur de `identityProviderManager` dans le constructeur. Pour plus d'informations, rendez-vous sur la page de [AWSCognitoCredentialsProvider](https://github.com/aws-amplify/aws-sdk-ios)référence et choisissez **initWithRegionType : identityPoolId : identityProviderManager**.

### iOS : Swift
<a name="using-facebook-1.ios-swift"></a>

Pour ajouter l'authentification Facebook, commencez par suivre le [Guide Facebook](https://developers.facebook.com/docs/ios) afin d'intégrer le kit SDK Facebook à votre application. Ajoutez ensuite un [bouton « Login with Facebook »](https://developers.facebook.com/docs/facebook-login/ios) à votre interface utilisateur Le kit SDK Facebook utilise un objet session pour suivre son état. Amazon Cognito utilise le jeton d'accès de cet objet session pour authentifier l'utilisateur et le lier à un groupe d'identités Amazon Cognito (Identités fédérées) unique.

**Note**  
La fédération des groupes d'identités Amazon Cognito n'est pas compatible avec [Facebook Limited Login](https://developers.facebook.com/docs/facebook-login/limited-login). Pour plus d'informations sur la façon de configurer la connexion à Facebook pour iOS sans dépasser les autorisations définies pour la connexion limitée, voir Connexion à [Facebook pour iOS - Démarrage rapide](https://developers.facebook.com/docs/facebook-login/ios) sur *Meta pour les développeurs*.

Pour fournir le jeton d'accès Facebook à Amazon Cognito, implémentez le protocole [https://github.com/aws-amplify/aws-sdk-ios](https://github.com/aws-amplify/aws-sdk-ios).

Quand vous implémentez la méthode `logins`, renvoyez un dictionnaire contenant `AWSIdentityProviderFacebook`. Ce dictionnaire fait office de clé et le jeton d'accès actuel de l'utilisateur Facebook authentifié fait office de valeur, comme dans l'exemple de code suivant.

```
class FacebookProvider: NSObject, AWSIdentityProviderManager {
    func logins() -> AWSTask<NSDictionary> {
        if let token = AccessToken.current?.authenticationToken {
            return AWSTask(result: [AWSIdentityProviderFacebook:token])
        }
        return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"]))
    }
}
```

Lorsque vous instanciez `AWSCognitoCredentialsProvider`, transmettez la classe qui implémente `AWSIdentityProviderManager` comme valeur de `identityProviderManager` dans le constructeur. Pour plus d'informations, rendez-vous sur la page de [https://github.com/aws-amplify/aws-sdk-ios](https://github.com/aws-amplify/aws-sdk-ios)référence et choisissez **initWithRegionType : identityPoolId : identityProviderManager**.

### JavaScript
<a name="using-facebook-1.javascript"></a>

Pour ajouter l'authentification Facebook, suivez les instructions fournies dans la page [Facebook Login pour le web](https://developers.facebook.com/docs/facebook-login/login-flow-for-web/v2.3) et ajoutez le bouton **Login with Facebook** (Se connecter avec Facebook) sur votre site web. Le kit SDK Facebook utilise un objet session pour suivre son état. Amazon Cognito utilise le jeton d'accès de cet objet de session pour authentifier l'utilisateur, générer l'identifiant unique et, si nécessaire, accorder à l'utilisateur l'accès à d'autres ressources. AWS 

Après avoir authentifié votre utilisateur avec le kit SDK Facebook, ajoutez le jeton de session au fournisseur d'informations d'identification Amazon Cognito.

```
FB.login(function (response) {

  // Check if the user logged in successfully.
  if (response.authResponse) {

    console.log('You are now logged in.');

    // Add the Facebook access token to the Amazon Cognito credentials login map.
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
      IdentityPoolId: 'IDENTITY_POOL_ID',
      Logins: {
        'graph.facebook.com': response.authResponse.accessToken
      }
    });

    // Obtain AWS credentials
    AWS.config.credentials.get(function(){
        // Access AWS resources here.
    });

  } else {
    console.log('There was a problem logging you in.');
  }

});
```

Le SDK Facebook obtient un OAuth jeton qu'Amazon Cognito utilise pour AWS générer les informations d'identification de votre utilisateur final authentifié. Amazon Cognito utilise également ce jeton pour rechercher dans votre base de données utilisateur l'existence d'un utilisateur correspondant à cette identité Facebook particulière. Si l'utilisateur existe déjà, l'API renvoie l'identifiant correspondant. Dans le cas contraire, elle renvoie un nouvel identifiant. Les identifiants sont automatiquement mis en cache par le kit SDK client sur le dispositif local.

**Note**  
Après avoir configuré le mappage des connexions, effectuez un appel à `refresh` ou `get` pour obtenir les informations d'identification. Pour un exemple de code, voir « Cas d'utilisation 17, intégration de groupes d'utilisateurs à Cognito Identity » dans le [JavaScript fichier README](https://github.com/amazon-archives/amazon-cognito-identity-js/blob/master/README.md).

### Unity
<a name="using-facebook-1.unity"></a>

Pour ajouter l'authentification Facebook, commencez par suivre le [Guide Facebook](https://developers.facebook.com/docs/unity) afin d'intégrer le kit SDK Facebook à votre application. Amazon Cognito utilise le jeton d'accès Facebook de l'objet `FB` pour générer un identifiant d'utilisateur unique associé à une identité Amazon Cognito.

Après avoir authentifié votre utilisateur avec le kit SDK Facebook, ajoutez le jeton de session au fournisseur d'informations d'identification Amazon Cognito :

```
void Start()
{
    FB.Init(delegate() {
        if (FB.IsLoggedIn) { //User already logged in from a previous session
            AddFacebookTokenToCognito();
        } else {
            FB.Login ("email", FacebookLoginCallback);
        }
    });
}

void FacebookLoginCallback(FBResult result)
{
    if (FB.IsLoggedIn)
    {
        AddFacebookTokenToCognito();
    }
    else
    {
        Debug.Log("FB Login error");
    }
}

void AddFacebookTokenToCognito()
{
    credentials.AddLogin ("graph.facebook.com", AccessToken.CurrentAccessToken.TokenString);
}
```

Avant d'utiliser `FB.AccessToken`, appelez `FB.Login()` et assurez-vous que `FB.IsLoggedIn` a pour valeur true.

### Xamarin
<a name="using-facebook-1.xamarin"></a>

**Xamarin pour Android :**

```
public void InitializeFacebook() {
    FacebookSdk.SdkInitialize(this.ApplicationContext);
    callbackManager = CallbackManagerFactory.Create();
    LoginManager.Instance.RegisterCallback(callbackManager, new FacebookCallback &lt; LoginResult &gt; () {
      HandleSuccess = loginResult = &gt; {
        var accessToken = loginResult.AccessToken;
        credentials.AddLogin("graph.facebook.com", accessToken.Token);
        //open new activity
      },
      HandleCancel = () = &gt; {
        //throw error message
      },
      HandleError = loginError = &gt; {
        //throw error message
      }
    });
    LoginManager.Instance.LogInWithReadPermissions(this, new List &lt; string &gt; {
      "public_profile"
    });
  }
```

**Xamarin pour iOS :**

```
public void InitializeFacebook() {
  LoginManager login = new LoginManager();
  login.LogInWithReadPermissions(readPermissions.ToArray(), delegate(LoginManagerLoginResult result, NSError error) {
    if (error != null) {
      //throw error message
    } else if (result.IsCancelled) {
      //throw error message
    } else {
      var accessToken = loginResult.AccessToken;
      credentials.AddLogin("graph.facebook.com", accessToken.Token);
      //open new view controller
    }
  });
}
```