Saltar al contenido principal
Sign in with Google 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.

Cómo funciona

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

Antes de comenzar

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

Configurar Sign in with Google para aplicaciones Android

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.

Crear credenciales en Google Cloud Console

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

Configurar Auth0

El flujo Sign in with Google utiliza el intercambio de tokens de , 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 o de la .
Para actualizar la aplicación a través del Auth0 Dashboard, siga estos pasos:
  1. Vaya a Applications > 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.
  5. Seleccione Save Changes.

Actualiza el código en la aplicación Android

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

Escenarios de autenticación adicionales

Aunque la implementación actual de Google no ofrece una guía clara sobre la federación empresarial y los desafíos adicionales de (MFA), puede incorporar estas capacidades al pasar a la experiencia web.

Federación empresarial

Auth0 admite la federación empresarial, lo que le permite conectar proveedores de identidad empresariales (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 de Google y pase el email proporcionado en el 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.
if (error.isAccessDenied && reason == "Enterprise Domain") {
WebAuthProvider.login(account)
	.withParameters(mapOf("login_hint" to email))
	.start(...)
}

Consideraciones sobre MFA durante el intercambio de tokens

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.
if (error.isMultifactorRequired) {
WebAuthProvider.login(account)
	.withParameters(mapOf(
"login_hint" to email,
"connection" to "google-oauth-2"
))
	.start(...)
}