> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Aprende a implementar Sign In with Google para aplicaciones móviles nativas.

# Agregar Sign In with Google a aplicaciones nativas de Android

[Sign in with Google](https://developers.google.com/identity/gsi/web/guides/overview) permite a los usuarios autenticarse con una cuenta de Google activa, lo que ofrece una experiencia de Login fluida en tu aplicación. Puedes implementar esta funcionalidad en tus aplicaciones nativas de Android con Credential Manager for Android y Auth0.

Consulta las secciones a continuación para obtener más información sobre los pasos y métodos necesarios para configurar Sign in with Google.

<div id="how-it-works">
  ## Cómo funciona
</div>

Esta característica utiliza el Credential Manager de Android para facilitar Sign in with Google en su aplicación de Android protegida por Auth0. Los pasos siguientes muestran el flujo general que sigue el usuario para Sign in with Google.

<Frame>
  <img src="https://mintcdn.com/translations/6GE5Z24GDCZehiJ9/docs/images/cdy7uua7fh8z/6WofMhOOH7GU0NwEcyebiZ/4d4adcb20b74215c7026c1bc9c95be6c/Google_Sign_In_diagram.png?fit=max&auto=format&n=6GE5Z24GDCZehiJ9&q=85&s=d3062e551fc414cd920b510a1b33c530" alt="" width="3884" height="2351" data-path="docs/images/cdy7uua7fh8z/6WofMhOOH7GU0NwEcyebiZ/4d4adcb20b74215c7026c1bc9c95be6c/Google_Sign_In_diagram.png" />
</Frame>

1. Un usuario abre su aplicación de Android y elige Sign in with Google.
2. Su aplicación de Android usa el Credential Manager para solicitar Sign in with Google.
3. En la pantalla de selección de cuenta, el usuario elige la cuenta de Google que prefiera.
4. Google inicia la sesión del usuario localmente y se encarga de toda la autenticación.
5. El usuario completa el inicio de sesión sin necesidad de ninguna interacción adicional.
6. Google devuelve un `id_token` a su aplicación de Android.
7. Su aplicación de Android envía el `id_token` a su inquilino de Auth0 para validarlo. Auth0 valida el `client_id` del `id_token` comparándolo con el `client_id` de la conexión social de Google configurada en su inquilino.
8. El servidor de Auth0 devuelve un `access_token` a su aplicación de Android.

<div id="before-you-begin">
  ## Antes de comenzar
</div>

Antes de empezar a configurar Sign in with Google, asegúrese de que se cumpla lo siguiente:

* Se haya configurado una [conexión social de Google](https://marketplace.auth0.com/integrations/google-social-connection) en su inquilino de Auth0.
  * En la configuración **Purpose**, habilite la conexión para Authentication, Connected Accounts for Token Vault o ambas opciones. Para obtener más información, consulte [Autenticación de usuarios vs. cuentas conectadas](/es/docs/secure/tokens/token-vault/connected-accounts-for-token-vault#user-authentication-vs-connected-accounts).
* Se haya agregado Sign in with Google a su aplicación de Android mediante [Credential Manager de Android](https://developer.android.com/identity/sign-in/credential-manager-siwg).

<div id="configuring-sign-in-with-google-for-android-applications">
  ## Configurar Sign in with Google para aplicaciones Android
</div>

La implementación de Sign in with Google implica tres pasos principales:

1. Crear credenciales en Google Cloud Console.
2. Configurar los detalles de la aplicación en Auth0.
3. Actualizar el código de la aplicación Android.

En las secciones siguientes se proporcionan detalles técnicos sobre cada uno de estos pasos.

<div id="create-credentials-in-the-google-cloud-console">
  ### Crear credenciales en Google Cloud Console
</div>

Para empezar, primero debes configurar los siguientes elementos en Google Cloud Console:

1. Crea una credencial de OAuth 2.0 con el tipo establecido en `Android`. Esto se denomina `client_id_native`.
2. Agrega el hash SHA1 de la aplicación nativa al cliente de Android del paso 1.

   * Actualmente, Google solo admite SHA1.
3. Crea un cliente OAuth adicional para la web (`client_id_web`).

   * En algunos casos, es posible que ya hayas configurado este elemento para tus conexiones sociales que admiten Sign in with Google basado en la web.

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  No puedes usar Google Credential Manager con el `client_id` de Android; de lo contrario, se producirá un error. En el ID Token que devuelve Google, la parte autorizada (`azp`) se establece automáticamente en el ID de cliente de OAuth de Android, y la audiencia (`aud`) se establece en el ID de cliente de OAuth para la web.

  Al invocar Credentials Manager desde Android, la aplicación nativa debe usar `client_id_web` mediante `.setServerClientId` en el SDK de Credentials Manager. `client_id_web` corresponde a la credencial de OAuth 2.0 de aplicación web en Google Cloud Console y se configura en la conexión social de Google OAuth2. Para obtener más información, consulta la [documentación de Google](https://developer.android.com/training/sign-in/credential-manager).
</Callout>

<div id="configure-auth0">
  ### Configurar Auth0
</div>

El flujo Sign in with Google utiliza el intercambio de tokens de <Tooltip tip="OAuth 2.0: Marco de autorización que define protocolos y flujos de trabajo de autorización." cta="Ver glosario" href="/es/docs/glossary?term=OAuth+2.0">OAuth 2.0</Tooltip>, que tiene lugar entre Auth0 y su aplicación Android.

Después de crear sus credenciales en Google Cloud Console, puede habilitar Sign in with Google mediante Credential Manager for Android. Para ello, actualice su aplicación a través del <Tooltip tip="Auth0 Dashboard: El producto principal de Auth0 para configurar sus servicios." cta="Ver glosario" href="/es/docs/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip> o de la <Tooltip tip="Management API: Un producto que permite a los clientes realizar tareas administrativas." cta="Ver glosario" href="/es/docs/glossary?term=Management+API">Management API</Tooltip>.

<Tabs>
  <Tab title="Auth0 Dashboard">
    Para actualizar la aplicación a través del Auth0 Dashboard, siga estos pasos:

    1. Vaya a [Applications > Applications](https://manage.auth0.com/#/applications) y elija su aplicación nativa de Android.
    2. En la pestaña **Settings**, expanda la sección **Advanced Settings**.
    3. Seleccione la pestaña **Device Settings** y active la opción **Enable Sign in with Google (Android 4.4+) using Credentials Manager**.
    4. **Para aplicaciones nuevas**: en la pestaña **Device Settings**, complete los campos de la sección **Android**, incluido **App Package Name**. Para obtener más información, consulte [Enable Android App Links Support](/es/docs/get-started/applications/enable-android-app-links-support).
    5. Seleccione **Save Changes**.
  </Tab>

  <Tab title="Management API">
    Para actualizar su aplicación a través de la Management API, llame al endpoint [Update a client](https://auth0.com/docs/api/management/v2/clients/patch-clients-by-id) de la siguiente manera:

    ```json lines theme={null}
    PATCH /api/v2/clients/{id}

    { 
      "native_social_login": { 
        "google": { 
          "enabled": true 
        } 
      },
      "mobile": {
        "android": {
          // Actualice este valor para que coincida con el identificador de paquete de su aplicación
          "app_package_name": "com.yoursite.yourapp"
        }
      }
    }
    ```
  </Tab>
</Tabs>

<div id="update-code-in-the-android-application">
  ### Actualiza el código en la aplicación Android
</div>

El siguiente ejemplo puede complementar el flujo web que se usa para autenticaciones que no sean con Google, como Microsoft, username y contraseña, o federaciones empresariales.

```go lines theme={null}
auth0Client.loginWithNativeSocialToken(
  googleCredential.idToken.toString(),
  "http://auth0.com/oauth/token-type/google-id-token")
    .validateClaims()
    .setScope("openid profile email")
    .start(object: Callback < Credentials, AuthenticationException > {
      override fun onFailure(error: AuthenticationException) {
        showSnackBar("Failure a0: $error")

      }

   override fun onSuccess(auth0Creds: Credentials) {
    // Lógica para gestionar las credenciales
    }
    })
```

Para obtener `googleCredential`, el código de la aplicación nativa debe invocar la biblioteca de Google. Para más información, consulta la [documentación de Credential Manager de Google](https://developer.android.com/training/sign-in/credential-manager).

```go lines expandable theme={null}
// Generar un nonce para protección contra repetición de tokens
val randomNonce = UUID.randomUUID().toString()

// Preparar una solicitud de inicio de sesión
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
    // Esto debe coincidir con el ID de cliente configurado en el Auth0 Dashboard
    .setServerClientId(
        getString(R.string.com_google_client_id)
    )
	.setNonce(randomNonce)
    .build()

val request: GetCredentialRequest = GetCredentialRequest.Builder()
    .addCredentialOption(googleIdOption)
    .build()

// Mostrar pantalla
val credMan = CredentialManager.create(this@MainActivity.baseContext);
val result = credMan.getCredential(
    request = request,
    context = this@MainActivity.baseContext,
)

// Gestionar el resultado 
val creds = result.credential

when (creds) {
    is CustomCredential -> {
        if (creds.type ==
                    GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL
            ) {
                try {
                    val googleCredentials = GoogleIdTokenCredential
                            .createFrom(creds.data)
// Resto del código
```

<div id="additional-authentication-scenarios">
  ## Escenarios de autenticación adicionales
</div>

Aunque la implementación actual de Google no ofrece una guía clara sobre la federación empresarial y los desafíos adicionales de <Tooltip tip="Autenticación multifactor (MFA): Proceso de autenticación del usuario que utiliza un factor además de username y contraseña, como un code enviado por SMS." cta="Ver glosario" href="/es/docs/glossary?term=multi-factor+authentication">autenticación multifactor</Tooltip> (MFA), puede incorporar estas capacidades al pasar a la experiencia web.

<div id="enterprise-federation">
  ### Federación empresarial
</div>

Auth0 admite la federación empresarial, lo que le permite conectar [proveedores de identidad empresariales](/es/docs/authenticate/identity-providers/enterprise-identity-providers) (como Okta Workforce, ADFS u otros sistemas compatibles con OIDC) a su inquilino de Auth0 para que los usuarios puedan autenticarse con sus credenciales corporativas existentes.

Si necesita usar federación empresarial, se recomienda redirigir al usuario al flujo basado en web, en lugar de depender del `id_token`, como se muestra en los ejemplos anteriores.

Para ello, decodifique el token <Tooltip tip="JSON Web Token (JWT): formato estándar de ID Token (y, a menudo, de Token de acceso) usado para representar claim de forma segura entre dos partes." cta="Ver glosario" href="/es/docs/glossary?term=JWT">JWT</Tooltip> de Google y pase el `email` proporcionado en el <Tooltip tip="JSON Web Token (JWT): formato estándar de ID Token (y, a menudo, de Token de acceso) usado para representar claim de forma segura entre dos partes." cta="Ver glosario" href="/es/docs/glossary?term=ID+token">ID Token</Tooltip> como `login_hint`. Esto evita que el usuario final tenga que volver a introducir su dirección de correo electrónico en el flujo web.

```go lines theme={null}
if (error.isAccessDenied && reason == "Enterprise Domain") {
WebAuthProvider.login(account)
	.withParameters(mapOf("login_hint" to email))
	.start(...)
}
```

<div id="mfa-considerations-during-token-exchange">
  ### Consideraciones sobre MFA durante el intercambio de tokens
</div>

Auth0 devuelve un error a la aplicación durante el intercambio de tokens cuando la política de la conexión OAuth de Google requiere MFA. Este error se incluye en la respuesta a la aplicación.

Cuando se produce el error anterior, la aplicación puede usar WebAuth con el contexto enriquecido disponible en el `id_token` de Google. En este escenario, el usuario final solo verá la pantalla de MFA.

```go lines theme={null}
if (error.isMultifactorRequired) {
WebAuthProvider.login(account)
	.withParameters(mapOf(
"login_hint" to email,
"connection" to "google-oauth-2"
))
	.start(...)
}
```
