

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Configurar o Facebook como um IdP de bancos de identidades
<a name="facebook"></a>

Os bancos de identidades do Amazon Cognito trabalham com o Facebook para fornecer autenticação federada aos usuários da aplicação. Esta seção explica como inscrever e configurar a aplicação com o Facebook como IdP.

## Configurar o Facebook
<a name="set-up-facebook"></a>

Registre seu aplicativo no Facebook antes de autenticar os usuários do Facebook e interagir com o Facebook APIs.

O [Portal de desenvolvedores do Facebook](https://developers.facebook.com/) ajuda você a configurar sua aplicação. Siga esse procedimento antes de integrar o Facebook no grupo de identidades do Amazon Cognito:

**nota**  
A federação de bancos de identidades do Amazon Cognito não é compatível com o [Login limitado do Facebook](https://developers.facebook.com/docs/facebook-login/limited-login). Para obter mais informações sobre como configurar o Login do Facebook para iOS sem exceder as permissões definidas para o Login limitado, consulte [Login do Facebook para iOS - Início rápido](https://developers.facebook.com/docs/facebook-login/ios), em *Meta para desenvolvedores*.

**Configurar o Facebook**

1. No [Facebook Developers portal](https://developers.facebook.com/), faça login com as credenciais do Facebook.

1. No menu **Apps**, selecione **Add a New App**.

1. Selecione uma plataforma e conclua o processo de início rápido.

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

Para obter mais informações sobre como integrar aplicativos Android ao Login do Facebook, consulte o [Guia de conceitos básicos do Facebook](https://developers.facebook.com/docs/android/getting-started).

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

Para obter mais informações sobre como integrar aplicativos iOS Objective-C ao Login do Facebook, consulte o [Guia de conceitos básicos do Facebook](https://developers.facebook.com/docs/ios/getting-started/).

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

Para obter mais informações sobre como integrar aplicativos iOS Swift ao Login do Facebook, consulte o [Guia de conceitos básicos do Facebook](https://developers.facebook.com/docs/ios/getting-started/).

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

Para obter mais informações sobre como integrar aplicativos JavaScript da web com o Login do Facebook, consulte o [Guia de introdução do Facebook](https://developers.facebook.com/docs/facebook-login/login-flow-for-web/v2.3).

## Configurar um provedor de identidades no console de bancos de identidades do Amazon Cognito
<a name="configure-the-external-provider-in-the-amazon-cognito-console"></a>

Use o procedimento a seguir para configurar seu provedor de identidades.

**Como adicionar um provedor de identidades (IdP) Facebook**

1. Selecione **Bancos de identidades** no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Selecione um banco de identidades.

1. Selecione a guia **Acesso do usuário**.

1. Selecione **Adicionar provedor de identidade**.

1. Selecione **Facebook**.

1. Insira o **ID do aplicativo** do OAuth projeto que você criou no [Meta for Developers](https://developers.facebook.com/). Para ter mais informações, consulte [Login do Facebook](https://developers.facebook.com/docs/facebook-login/) nos *documentos do Meta for Developers.*

1. Para alterar o perfil que o Amazon Cognito solicita ao emitir credenciais para usuários que se autenticaram com esse provedor, defina **Configurações de perfil**.

   1. Você pode atribuir aos usuários desse IdP o **Perfil padrão** que você configurou ao definir seu **Perfil autenticado** ou **Escolher perfil com regras**.

     1. Se você escolheu **Escolher perfil com regras**, insira a **Declaração** de origem da autenticação do usuário, o **Operador** pelo qual deseja comparar a declaração, o **Valor** que gerará uma correspondência com essa opção de perfil e o **Perfil** que deseja atribuir quando houver correspondência com a **Atribuição de função**. Selecione **Adicionar outra** para criar uma regra adicional com base em uma condição diferente.

     1. Selecione uma **Resolução de perfil**. Quando as declarações do usuário não correspondem às suas regras, você pode negar ou emitir credenciais para seu **Perfil autenticado**.

1. Para alterar as tags de identidade principal que o Amazon Cognito atribui ao emitir credenciais para usuários que se autenticaram com esse provedor, configure **Atributos para controle de acesso**.

   1. Para não aplicar nenhuma tag de entidade principal, selecione **Inativo**.

   1. Para aplicar tags de entidade principal com base em declarações `sub` e `aud`, selecione **Usar mapeamentos padrão**.

   1. Para criar seu próprio esquema personalizado de atributos para as tags de entidade principal, selecione **Usar mapeamentos personalizados**. Depois, insira a **Chave de tag** que você deseja obter de cada **declaração** e representar em uma tag.

1. Selecione **Salvar alterações**.

## Uso do Facebook
<a name="using-facebook"></a>

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

Para adicionar a autenticação do Facebook, primeiro siga o [Guia do Facebook](https://developers.facebook.com/docs/android) para integrar o SDK do Facebook à aplicação. Em seguida, adicione um [botão **Login with Facebook**](https://developers.facebook.com/docs/facebook-login/android) à interface do usuário Android. O SDK do Facebook usa um objeto de sessão para rastrear o estado. O Amazon Cognito usa o token de acesso desse objeto de sessão para autenticar o usuário, gerar o identificador exclusivo e, se necessário, conceder ao usuário acesso a outros recursos. AWS 

Depois de autenticar o usuário com o SDK do Facebook, adicione o token de sessão ao provedor de credenciais do Amazon Cognito.

Facebook SDK 4.0 ou posterior:

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

Facebook SDK antes de 4.0:

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

O processo de login do Facebook inicializa uma sessão singleton no respectivo SDK. O objeto de sessão do Facebook contém um OAuth token que o Amazon Cognito usa para gerar AWS credenciais para seu usuário final autenticado. O Amazon Cognito também usa o token para verificar se existe um usuário no banco de dados de usuário que corresponda a essa identidade específica do Facebook. Se o usuário já existe, a API retorna o identificador existente. Do contrário, a API retorna um novo identificador. Os identificadores são automaticamente armazenados em cache no dispositivo local pelo SDK cliente.

**nota**  
Depois de definir o mapa de logins, faça uma chamada para `refresh` ou `get` para recuperar as AWS credenciais.

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

Para adicionar a autenticação do Facebook, primeiro siga o [Guia do Facebook](https://developers.facebook.com/docs/ios) para integrar o SDK do Facebook à aplicação. Em seguida, adicione um [botão Login with Facebook](https://developers.facebook.com/docs/facebook-login/ios) à interface de usuário. O SDK do Facebook usa um objeto de sessão para rastrear o estado. O Amazon Cognito usa o token de acesso desse objeto de sessão para autenticar o usuário e vinculá-lo a grupos de identidades exclusivas do Amazon Cognito (identidades federadas).

Para fornecer o token de acesso do Facebook ao Amazon Cognito, implemente o protocolo [https://github.com/aws-amplify/aws-sdk-ios](https://github.com/aws-amplify/aws-sdk-ios).

Ao implementar o método `logins`, retorne um dicionário contendo `AWSIdentityProviderFacebook`. Esse dicionário atua como a chave, ao passo que o token de acesso atual do usuário autenticado do Facebook atua como o valor, conforme mostrado no exemplo de código a seguir.

```
- (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"}]];
    }
}
```

Ao instanciar o `AWSCognitoCredentialsProvider`, passe a classe que implementa `AWSIdentityProviderManager` como o valor de `identityProviderManager` no construtor. Para obter mais informações, acesse a página de [AWSCognitoCredentialsProvider](https://github.com/aws-amplify/aws-sdk-ios)referência e escolha **initWithRegionTipo:identityPoolId: identityProviderManager**.

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

Para adicionar a autenticação do Facebook, primeiro siga o [Guia do Facebook](https://developers.facebook.com/docs/ios) para integrar o SDK do Facebook à aplicação. Em seguida, adicione um [botão Login with Facebook](https://developers.facebook.com/docs/facebook-login/ios) à interface de usuário. O SDK do Facebook usa um objeto de sessão para rastrear o estado. O Amazon Cognito usa o token de acesso desse objeto de sessão para autenticar o usuário e vinculá-lo a grupos de identidades exclusivas do Amazon Cognito (identidades federadas).

**nota**  
A federação de bancos de identidades do Amazon Cognito não é compatível com o [Login limitado do Facebook](https://developers.facebook.com/docs/facebook-login/limited-login). Para obter mais informações sobre como configurar o Login do Facebook para iOS sem exceder as permissões definidas para o Login limitado, consulte [Login do Facebook para iOS - Início rápido](https://developers.facebook.com/docs/facebook-login/ios), em *Meta para desenvolvedores*.

Para fornecer o token de acesso do Facebook ao Amazon Cognito, implemente o protocolo [https://github.com/aws-amplify/aws-sdk-ios](https://github.com/aws-amplify/aws-sdk-ios).

Na implementação do método `logins`, retorne um dicionário contendo `AWSIdentityProviderFacebook`. Esse dicionário atua como a chave, ao passo que o token de acesso atual do usuário autenticado do Facebook atua como o valor, conforme mostrado no exemplo de código a seguir.

```
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"]))
    }
}
```

Ao instanciar o `AWSCognitoCredentialsProvider`, passe a classe que implementa `AWSIdentityProviderManager` como o valor de `identityProviderManager` no construtor. Para obter mais informações, acesse a página de [https://github.com/aws-amplify/aws-sdk-ios](https://github.com/aws-amplify/aws-sdk-ios)referência e escolha **initWithRegionTipo:identityPoolId: identityProviderManager**.

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

Para adicionar a autenticação do Facebook, siga o [Login do Facebook para web](https://developers.facebook.com/docs/facebook-login/login-flow-for-web/v2.3) e adicione o botão **Login with Facebook** ao seu site. O SDK do Facebook usa um objeto de sessão para rastrear o estado. O Amazon Cognito usa o token de acesso desse objeto de sessão para autenticar o usuário, gerar o identificador exclusivo e, se necessário, conceder ao usuário acesso a outros recursos. AWS 

Depois de autenticar o usuário com o SDK do Facebook, adicione o token de sessão ao provedor de credenciais do 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.');
  }

});
```

O SDK do Facebook obtém um OAuth token que o Amazon Cognito usa para AWS gerar credenciais para seu usuário final autenticado. O Amazon Cognito também usa o token para fazer a verificação em relação ao banco de dados de usuário quanto à existência de um usuário que corresponda a essa identidade específica do Facebook. Se o usuário já existe, a API retorna o identificador existente. Caso contrário, um novo identificador é retornado. Identificadores são automaticamente armazenados em cache pelo cliente SDK no dispositivo local.

**nota**  
Depois de configurar o mapa de logins, chame `refresh` ou `get` para obter as credenciais. Para obter um exemplo de código, consulte “Caso de uso 17, Integrando grupos de usuários com a Identidade Cognito”, [JavaScript no](https://github.com/amazon-archives/amazon-cognito-identity-js/blob/master/README.md) arquivo README.

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

Para adicionar a autenticação do Facebook, primeiro siga o [Guia do Facebook](https://developers.facebook.com/docs/unity) para integrar o SDK do Facebook à aplicação. O Amazon Cognito usa o token de acesso do Facebook do objeto `FB` para gerar um identificador exclusivo do usuário que está associado a uma identidade do Amazon Cognito.

Depois de autenticar o usuário com o SDK do Facebook, adicione o token de sessão ao provedor de credenciais do 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);
}
```

Antes de usar `FB.AccessToken`, chame `FB.Login()` e verifique se `FB.IsLoggedIn` é verdadeiro.

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

**Xamarin para 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 para 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
    }
  });
}
```