Base de données externe vs. stockage de données Auth0
Le stockage de données Auth0 est conçu pour les données d’authentification. Le stockage de tout ce qui dépasse les renseignements utilisateur par défaut ne devrait se faire que dans des cas limités. Voici pourquoi :- Évolutivité : le stockage de données Auth0 présente des limites en matière d’évolutivité, et les données de votre application pourraient dépasser les seuils appropriés. En utilisant une base de données externe, vous gardez votre stockage de données Auth0 simple, tandis que la base de données externe, plus efficace, contient les données supplémentaires;
- Performance : vos données d’authentification sont probablement consultées moins souvent que vos autres données. Le stockage de données Auth0 n’est pas optimisé pour une utilisation à haute fréquence; vous devriez donc stocker ailleurs les données qui doivent être récupérées plus souvent;
- Souplesse : comme le stockage de données Auth0 a été conçu pour prendre en charge uniquement les profils utilisateur et les métadonnées qui y sont associées, vous êtes limité quant aux opérations que vous pouvez effectuer sur la base de données. En utilisant des bases de données distinctes pour vos autres données, vous pouvez les gérer comme il se doit et effectuer des requêtes directes sans utiliser l’ d’Auth0.
- Par exemple, vous pourriez avoir une table Users qui répertorie chaque utilisateur authentifié par Auth0. Chaque fois qu’un utilisateur se connecte, vous pourriez le rechercher dans la table. Si l’utilisateur n’existe pas, vous créeriez un nouvel enregistrement. S’il existe, vous mettriez à jour tous les champs, ce qui reviendrait essentiellement à conserver une copie locale de toutes les données utilisateur.
- Vous pourriez aussi stocker l’identifiant de l’utilisateur dans chaque table/collection contenant des données qui lui sont associées. Il s’agit d’une mise en œuvre plus simple, adaptée aux applications de plus petite taille.
Exemple de scénario de stockage des données utilisateur
Auth0 fournit un exemple d’application — une application mobile de musique — qui illustre l’expérience utilisateur de bout en bout lorsqu’on utilise Auth0 avec une base de données externe personnalisée. Cette application d’exemple est une application iOS créée à l’aide du projet de démarrage Auth0 iOS. Le backend utilise l’API Node.js. Pour voir une visualisation de la structure globale de l’application, consultez le scénario d’architecture Mobile + API.Métadonnées
Métadonnées d’application
Les éléments de données suivants de notre application mobile de musique peuvent être stockés dansapp_metadata :
- Le forfait d’abonnement de l’utilisateur
- Le droit de l’utilisateur de modifier ou non les listes de lecture en vedette
app_metadata plutôt que dans user_metadata, puisqu’ils ne devraient pas pouvoir être modifiés directement par l’utilisateur.
Métadonnées utilisateur
Les données suivantes de notre application musicale mobile se prêtent bien au stockage dansuser_metadata :
- Préférences de l’application
- Choix faits par l’utilisateur pour personnaliser son expérience de l’application à la connexion.
app_metadata, l’utilisateur peut facilement modifier celles qui sont stockées dans user_metadata.
Nous pouvons permettre à l’utilisateur de modifier son displayName, c’est-à-dire le nom qu’il voit lorsqu’il se connecte et qui s’affiche aux autres utilisateurs de l’application.
Pour afficher l’identifiant choisi par l’utilisateur chaque fois qu’il se connecte, nous utilisons une règle pour obtenir la valeur user.user_metadata.
displayName :

user_metadata :
Vous utilisez l’Auth0 CLI ? Si ce n’est pas déjà fait, configurez et authentifiez votre session CLI avant d’exécuter cette commande.
{yourAccessToken} par un jeton d’accès à la Management API.
Règles d’autorisation des données utilisateur
Utilisez les rules pour définir des autorisations indiquant si un utilisateur peut modifier ou non les listes de lecture en vedette.Attribuer le rôle Playlist Editor
La première règle envoie une requête à notre API Node, qui interroge ensuite la base de données connectée à Heroku pour vérifier combien de fois la liste de lecture de l’utilisateur a été écoutée. Si ce nombre est de 100 ou plus, nous attribuons la valeurplaylist_editor au tableau roles dans app_metadata.
Le paramètre scope indique le rôle
La deuxième Rule récupère le champ app_metadata et attribue le tableau roles à un champ de l’objet user afin qu’on puisse y accéder sans devoir appeler app_metadata dans l’application. Le paramètre scope peut ensuite préciser roles lorsque l’utilisateur se connecte, sans inclure tout le contenu de app_metadata dans l’objet user :
playlist_editor figure dans le tableau roles stocké dans app_metadata du profil de l’utilisateur, celui-ci sera accueilli comme ÉDITEUR après s’être connecté :

Associer les chansons d’un utilisateur à cet utilisateur
Nous devons associer les chansons d’un utilisateur à cet utilisateur, mais cette information n’est pas requise pour l’authentification. Voici comment stocker cette information dans une base de données distincte intégrée au backend de l’application. L’identifiant unique de l’utilisateur est leuser_id, et il correspond à la sous-propriété sub de l’objet idTokenPayload dans un authResult. Voici un exemple de ligne de la table songs dans notre base de données :
Le backend Node.js authentifie les requêtes vers l’URI associée à la récupération des données personnelles de l’utilisateur depuis la base de données en validant un .
En savoir plus sur l’authentification par jeton et sur l’implémentation des JWT dans vos applications.
Voici le code de validation des JWT tiré du projet de démarrage Node.js :
GET vers /secured/getFavGenre, l’API appelle la fonction queryGenre(), qui interroge la base de données et renvoie le genre préféré de l’utilisateur.
buildAPIRequest() prend en paramètres le chemin et la méthode HTTP de la requête, puis crée une requête à partir de l’URL de base de notre API Node.js, hébergée sur Heroku.
Dans l’application, la fonction getGenre() envoie une requête à l’API et modifie l’interface de l’application pour afficher la réponse à la requête envoyée à /genres/getFav. Le backend récupère les données requises pour cette action à l’aide de la fonction queryGenre(), puis renvoie les résultats à l’application :