Enregistrement Auth0.Android et renouvellement des jetons
Lorsqu’une authentification est effectuée avec la permission offline_access
incluse, elle renvoie un jeton d’actualisation qui peut être utilisé pour demander un nouveau jeton d’utilisateur, sans obliger l’utilisateur à s’authentifier à nouveau.
Gestionnaire des identifiants
Auth0.Android fournit une classe utilitaire permettant de simplifier le processus de stockage et de renouvellement des identifiants. Vous pouvez accéder aux propriétés accessToken
ou idToken
à partir de l’instance Identifiants. Il s’agit de la méthode privilégiée pour gérer les identifiants des utilisateurs.
Les gestionnaires d’identifiants sont inclus dans la trousse SDK Auth0.Android. Si cela ne fait pas encore partie de vos dépendances, suivez les directives dans Auth0.Android.
Il existe deux classes que vous pouvez utiliser pour gérer les identifiants :
CredentialsManager
stocke les données en texte clair.SecureCredentialsManager
chiffre les données avant de les stocker, en utilisant une combinaison d’algorithmes RSA et AES avec Android KeyStore.
Utilisation de la classe CredentialsManager
Configurer le gestionnaire d’identifiants
Créer une nouvelle instance en fournissant une AuthenticationAPIClient
et une implémentation Storage
.
val auth0 = Auth0(this)
val apiClient = AuthenticationAPIClient(auth0)
val manager = CredentialsManager(apiClient, SharedPreferencesStorage(this))
Was this helpful?
État actuel de l’authentification
Les identifiants stockés sont considérés comme valides s’ils n’ont pas expiré ou s’ils peuvent être actualisés. Vérifier si un utilisateur s’est déjà connecté.
val loggedIn = manager.hasValidCredentials()
Was this helpful?
Pour déconnecter l’utilisateur de votre application, supprimez les identifiants stockés et renvoyez-le à l’écran de connexion.
manager.clearCredentials()
Was this helpful?
Récupération des identifiants
Étant donné que les identifiants peuvent devoir être actualisés par rapport aux serveurs Auth0, cette méthode est asynchrone. Fournissez une implémentation de rappel à l’endroit où vous voulez recevoir les identifiants. Les identifiants renvoyés par cette méthode en cas de succès sont toujours valides.
manager.getCredentials(object: Callback<Credentials, CredentialsManagerException>() {
override fun onSuccess(credentials: Credentials) {
// Use credentials
}
override fun onFailure(error: CredentialsManagerException) {
// No credentials were previously saved or they couldn't be refreshed
}
})
Was this helpful?
Si l’accessToken
a expiré, le gestionnaire utilise automatiquement le refreshToken
et renouvelle les identifiants pour vous. Les nouveaux identifiants seront stockés pour un accès ultérieur.
Enregistrement des nouveaux identifiants
Vous pouvez enregistrer les identifiants obtenus lors de l’authentification dans le gestionnaire.
manager.saveCredentials(credentials)
Was this helpful?
Utilisation de la classe SecureCredentialsManager
Configurer SecureCredentialsManager
Créer une nouvelle instance en fournissant un Context
Android valide, une AuthenticationAPIClient
et une implémentation de Storage
.
val auth0 = Auth0(this)
val apiClient = AuthenticationAPIClient(auth0)
val manager = SecureCredentialsManager(this, apiClient, SharedPreferencesStorage(this))
Was this helpful?
Les méthodes pour obtenir, enregistrer, vérifier l’existence et effacer les identifiants sont les mêmes que celles décrites dans la section ci-dessus.
Pré-authentification de l’utilisateur
Cette classe fournit une fonctionnalité optionnelle pour une authentification supplémentaire à l’aide de l’écran de verrouillage configuré de l’appareil.
Appelez la méthode ci-dessous pour activer l’authentification. Fournit un contexte d’Activity
valide, un code de demande et deux chaînes facultatives à utiliser comme titre et description de l’écran de verrouillage.
Définissez également une constante de code de demande afin que le code de demande provenant du résultat de l’activité puisse être mis en correspondance.
companion object {
const val RC_UNLOCK_AUTHENTICATION = 123
}
// Called from an Activity
val available = manager.requireAuthentication(this, RC_UNLOCK_AUTHENTICATION, getString(R.string.unlock_authentication_title), getString(R.string.unlock_authentication_description))
Was this helpful?
Si la fonctionnalité est activée, le gestionnaire invitera l’utilisateur à s’authentifier à l’aide de l’écran de verrouillage configuré. Le résultat de cet appel sera obtenu dans la méthode onActivityResult
de l’activité fournie en premier paramètre. Si la fonctionnalité n’a pas été activée, l’authentification de l’écran de verrouillage sera ignorée.
Après avoir vérifié que le code de demande reçu correspond à celui utilisé dans l’étape de configuration, rediriger les paramètres reçus vers le gestionnaire pour terminer l’authentification. Les identifiants seront envoyés à la fonction de rappel d’origine.
override fun onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RC_UNLOCK_AUTHENTICATION && manager.checkAuthenticationResult(requestCode, resultCode)) {
return
}
super.onActivityResult(requestCode, resultCode, data)
}
Was this helpful?
Traitement des exceptions d’utilisation
Si un événement inattendu se produit lors de l’enregistrement ou de la récupération des identifiants, une exception CredentialsManagerException
est levée. Voici quelques-uns des scénarios d’échec auxquels vous pouvez vous attendre :
Les identifiants à stocker ne sont pas valides (par ex., certains des champs suivants ne sont pas définis :
access_token
,id_token
ouexpires_at
).Les identifiants stockés ont expiré mais il n’y a pas de jeton d’actualisation prévu pour les renouveler automatiquement.
Les paramètres de sécurité de l’écran de verrouillage de l’appareil ont été modifiés (par ex. le NIP de sécurité a été modifié). Même si
hasCredentials
renvoie un résultat positif, les clés de chiffrement seront considérées comme non valides. Jusqu’à ce quesaveCredentials
soit appelé à nouveau, il ne sera pas possible de décrypter un contenu existant précédemment, car les clés utilisées précédemment ne sont pas les mêmes que les nouvelles.L’appareil n’est pas compatible avec certains algorithmes de cryptographie requis par la classe
SecureCredentialsManager
. Cette situation est considérée comme un événement catastrophique et c’est la seule exception qui vous empêchera d’utiliser cette implémentation. Ce scénario se produit lorsque le fabricant d’équipement d’origine a modifié la mémoire morte Android de l’appareil, en supprimant certains des algorithmes officiellement inclus dans chaque distribution Android. Néanmoins, vous pouvez vérifier si c’est le cas dans l’instance d’exception elle-même en appelant la méthodeisDeviceIncompatible
. Ce faisant, vous pouvez décider de l’implémentation de remplacement pour le stockage des identifiants, par exemple en utilisant la classeCredentialsManager
habituelle.