Passer au contenu principal
Sign in with Google permet aux utilisateurs de s’authentifier avec un compte Google actif et offre une expérience de connexion fluide dans votre application. Vous pouvez intégrer cette fonctionnalité à vos applications Android natives à l’aide de Credential Manager for Android avec Auth0. Consultez les sections ci-dessous pour en savoir plus sur les étapes et les méthodes requises pour configurer Sign in with Google.

Fonctionnement

Cette fonctionnalité utilise le Credential Manager d’Android pour faciliter Sign in with Google dans votre application Android protégée par Auth0. Les étapes ci-dessous illustrent le parcours général de l’utilisateur pour Sign in with Google.
  1. Un utilisateur ouvre votre application Android et choisit Sign in with Google.
  2. Votre application Android utilise le Credential Manager pour demander Sign in with Google.
  3. À l’invite de sélection de compte, l’utilisateur choisit le compte Google qu’il préfère.
  4. Google authentifie l’utilisateur localement et prend en charge toute l’authentification.
  5. L’utilisateur termine la connexion sans interaction supplémentaire.
  6. Google renvoie un id_token à votre application Android.
  7. Votre application Android envoie le id_token à votre locataire Auth0 pour validation. Auth0 valide le client_id du id_token en le comparant au client_id de la connexion sociale Google configurée dans votre locataire.
  8. Le serveur Auth0 renvoie un access_token à votre application Android.

Avant de commencer

Avant de commencer à configurer Sign in with Google, assurez-vous que les conditions suivantes sont remplies :

Configurer Sign in with Google pour les applications Android

La configuration de Sign in with Google comporte trois étapes principales :
  1. Créer des identifiants dans Google Cloud Console.
  2. Configurer les paramètres de l’application dans Auth0.
  3. Mettre à jour le code de votre application Android.
Les sections ci-dessous présentent les détails techniques de chacune de ces étapes.

Créer des identifiants dans la console Google Cloud

Pour commencer, vous devez d’abord configurer les éléments suivants dans votre console Google Cloud :
  1. Créez un identifiant OAuth 2.0 dont le type est défini sur Android. Il est appelé client_id_native.
  2. Ajoutez le hachage SHA1 de l’application native au client Android créé à l’étape 1.
    • Google ne prend actuellement en charge que SHA1.
  3. Créez un identifiant client OAuth supplémentaire pour le Web (client_id_web).
    • Dans certains cas, vous avez peut-être déjà configuré cet élément pour vos connexions sociales qui prennent en charge le Web-based Sign in with Google.
Vous ne pouvez pas utiliser Google Credential Manager avec le client_id Android, sinon une erreur se produira. Dans l’ID Token renvoyé par Google, la partie autorisée (azp) est automatiquement définie sur l’ID client OAuth Android, et l’audience (aud) est définie sur l’ID client OAuth Web.Lors de l’appel à Credential Manager depuis Android, l’application native doit utiliser client_id_web au moyen de .setServerClientId dans le SDK Credential Manager. client_id_web correspond à l’identifiant OAuth 2 de l’application Web dans la console Google Cloud, et il est configuré dans la connexion sociale Google OAuth2. Pour en savoir plus, consultez la documentation de Google.

Configurer Auth0

Le flux Sign in with Google utilise l’échange de jetons , qui a lieu entre Auth0 et votre application Android. Après avoir créé vos identifiants dans Google Cloud Console, vous pouvez activer Sign in with Google à l’aide de Credential Manager pour Android. Pour ce faire, mettez à jour votre application au moyen de l’ ou de la .
Pour mettre à jour l’application dans l’Auth0 Dashboard, suivez les étapes ci-dessous :
  1. Accédez à Applications > Applications et choisissez votre application Android native.
  2. Dans l’onglet Settings, développez la section Advanced Settings.
  3. Sélectionnez l’onglet Device Settings et activez le paramètre Enable Sign in with Google (Android 4.4+) using Credentials Manager.
  4. Pour les nouvelles applications : dans l’onglet Device Settings, remplissez les champs de la section Android, y compris App Package Name. Pour en savoir plus, consultez Enable Android App Links Support.
  5. Sélectionnez Save Changes.

Mettre à jour le code de l’application Android

L’exemple suivant peut compléter le flux web utilisé pour les méthodes d’authentification autres que Google, comme Microsoft, le nom d’utilisateur et le mot de passe, ou les fédérations d’entreprise.
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) {
    // Logique pour gérer les informations d'identification
    }
    })
L’obtention de googleCredential nécessite que le code de l’application native appelle la bibliothèque Google. Pour en savoir plus, consultez la documentation de Google sur Credential Manager.
// Générer un nonce pour la protection contre la réutilisation de jetons
val randomNonce = UUID.randomUUID().toString()

// Préparer une demande de connexion
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
    // Doit correspondre à l'ID client configuré dans le Auth0 Dashboard
    .setServerClientId(
        getString(R.string.com_google_client_id)
    )
	.setNonce(randomNonce)
    .build()

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

// Afficher l'invite
val credMan = CredentialManager.create(this@MainActivity.baseContext);
val result = credMan.getCredential(
    request = request,
    context = this@MainActivity.baseContext,
)

// Gérer le résultat 
val creds = result.credential

when (creds) {
    is CustomCredential -> {
        if (creds.type ==
                    GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL
            ) {
                try {
                    val googleCredentials = GoogleIdTokenCredential
                            .createFrom(creds.data)
// Suite du code

Scénarios d’authentification supplémentaires

Bien que l’implémentation Google actuelle ne fournisse pas d’indications claires sur la fédération d’entreprise et les vérifications (MFA), vous pouvez prendre en charge ces fonctionnalités en passant à l’expérience Web.

Fédération d’entreprise

Auth0 prend en charge la fédération d’entreprise, ce qui vous permet de connecter des fournisseurs d’identité d’entreprise externes (comme Okta Workforce, ADFS ou d’autres systèmes compatibles avec OIDC) à votre locataire Auth0 afin que les utilisateurs puissent ensuite s’authentifier avec leurs identifiants d’entreprise existants. Si vous devez utiliser la fédération d’entreprise, il est recommandé de rediriger l’utilisateur vers le flux Web plutôt que de vous appuyer sur le id_token, comme dans les exemples précédents. Pour ce faire, décodez le de Google et transmettez le email fourni dans le comme login_hint. Cela évite à l’utilisateur final d’avoir à saisir de nouveau son adresse courriel dans le flux Web.
if (error.isAccessDenied && reason == "Enterprise Domain") {
WebAuthProvider.login(account)
	.withParameters(mapOf("login_hint" to email))
	.start(...)
}

Considérations relatives à la MFA lors de l’échange de jetons

Auth0 renvoie une erreur à l’application lors de l’échange de jetons lorsque la stratégie de la connexion Google OAuth exige l’authentification multifacteur. Cette erreur est incluse dans la réponse envoyée à l’application. Lorsque cette erreur se produit, votre application peut utiliser WebAuth avec le contexte enrichi disponible dans le id_token de Google. Dans ce scénario, l’utilisateur final ne verra que l’écran MFA.
if (error.isMultifactorRequired) {
WebAuthProvider.login(account)
	.withParameters(mapOf(
"login_hint" to email,
"connection" to "google-oauth-2"
))
	.start(...)
}