Structure des données utilisateur
Les utilisateurs sont les entités principales dans le service d'identité. Dans Logto, ils incluent des données d'Authentification (Authentication) de base basées sur le protocole OpenID Connect, ainsi que des données personnalisées.
Profil utilisateur
Chaque utilisateur a un profil contenant toutes les informations utilisateur.
Il se compose des types de données suivants :
- Données de base : il s'agit des informations de base du profil utilisateur. Il stocke toutes les autres propriétés de l'utilisateur sauf les
identities
sociales et lescustom_data
, telles que l'identifiant utilisateur, le nom d'utilisateur, l'email, le numéro de téléphone et la dernière connexion de l'utilisateur. - Identités sociales : stocke les informations utilisateur récupérées lors de la connexion sociale (c'est-à-dire la connexion avec un connecteur social), telles que Facebook, GitHub et WeChat.
- Données personnalisées : stocke des informations utilisateur supplémentaires non répertoriées dans les propriétés utilisateur prédéfinies, telles que la couleur et la langue préférées de l'utilisateur.
Voici un exemple de données d'un utilisateur récupérées lors d'une connexion à Facebook :
{
"id": "iHXPuSb9eMzt",
"username": null,
"primaryEmail": null,
"primaryPhone": null,
"name": "John Doe",
"avatar": "https://example.com/avatar.png",
"customData": {
"preferences": {
"language": "en",
"color": "#f236c9"
}
},
"identities": {
"facebook": {
"userId": "106077000000000",
"details": {
"id": "106077000000000",
"name": "John Doe",
"email": "[email protected]",
"avatar": "https://example.com/avatar.png"
}
}
},
"lastSignInAt": 1655799453171,
"applicationId": "admin_console"
}
Vous pouvez interroger le profil utilisateur en utilisant Logto Console ou Logto Management API, tel que GET /api/users/:userId
.
Données de base
Passons en revue toutes les propriétés des données de base de l'utilisateur.
id
id est une clé unique générée automatiquement pour identifier l'utilisateur dans Logto.
username
username est utilisé pour se connecter avec username et mot de passe.
Sa valeur provient du nom d'utilisateur avec lequel l'utilisateur s'est inscrit pour la première fois. Elle peut être null
. Sa valeur non nulle ne doit pas dépasser 128 caractères, ne contenir que des lettres, des chiffres et des underscores (_
), et NE PAS commencer par un chiffre.
primary_email
primary_email est l'adresse email de l'utilisateur, utilisée pour se connecter avec l'email et le code d'accès.
Sa valeur provient généralement de l'adresse email avec laquelle l'utilisateur s'est inscrit pour la première fois. Elle peut être null
. Sa longueur maximale est de 128.
primary_phone
primary_phone est le numéro de téléphone de l'utilisateur, utilisé pour se connecter avec le numéro de téléphone et le code d'accès par SMS.
Sa valeur provient généralement du numéro de téléphone avec lequel l'utilisateur s'est inscrit pour la première fois. Elle peut être null
. Sa valeur non nulle doit contenir des chiffres précédés de l'indicatif téléphonique du pays (à l'exclusion du signe plus +
).
name
name est le nom complet de l'utilisateur. Sa longueur maximale est de 128.
avatar
avatar est l'URL pointant vers l'image de l'avatar de l'utilisateur. Sa longueur maximale est de 2048.
Si l'utilisateur s'inscrit avec un connecteur social comme Google et Facebook, sa valeur peut être récupérée à partir des informations utilisateur sociales.
Cette propriété est mappée à la revendication picture
dans la norme OpenID Connect.
profile
profile stocke des revendications standard OpenID Connect supplémentaires qui ne sont pas incluses dans les propriétés de l'utilisateur.
Sa définition de type peut être trouvée dans ce fichier. Voici une copie de la définition de type :
type UserProfile = Partial<{
familyName: string;
givenName: string;
middleName: string;
nickname: string;
preferredUsername: string;
profile: string;
website: string;
gender: string;
birthdate: string;
zoneinfo: string;
locale: string;
address: Partial<{
formatted: string;
streetAddress: string;
locality: string;
region: string;
postalCode: string;
country: string;
}>;
}>;
Partial
signifie que toutes les propriétés sont facultatives.
Une différence par rapport aux autres revendications standard est que les propriétés dans profile
ne seront incluses dans le jeton d’identifiant (ID token) ou la réponse de l'endpoint userinfo que lorsque leurs valeurs ne sont pas vides, tandis que les autres revendications standard retourneront null
si les valeurs sont vides.
application_id
La valeur de application_id provient de l'application à laquelle l'utilisateur s'est connecté pour la première fois. Elle peut être null
.
last_signed_in_at
last_signed_in_at est le timestamp avec le fuseau horaire lorsque l'utilisateur s'est connecté pour la dernière fois.
password_encrypted
password_encrypted est utilisé pour stocker le mot de passe chiffré de l'utilisateur.
Sa valeur provient du mot de passe avec lequel l'utilisateur s'est inscrit pour la première fois. Elle peut être null
. Si sa valeur est non nulle, son contenu original avant chiffrement doit comporter au moins six caractères.
password_encryption_method
password_encryption_method est utilisé pour chiffrer le mot de passe de l'utilisateur. Sa valeur est initialisée lorsque l'utilisateur s'inscrit avec le nom d'utilisateur et le mot de passe. Elle peut être null
.
Logto utilise l'implémentation node-argon2 d'Argon2 comme méthode de chiffrement par défaut ; consultez la référence pour plus de détails si vous êtes intéressé.
Exemple d'un password_encrypted et password_encryption_method d'un utilisateur dont le mot de passe est 123456
:
{
"password_encryption_method": "Argon2i",
"password_encrypted": "$argon2i$v=19$m=4096,t=10,p=1$aZzrqpSX45DOo+9uEW6XVw$O4MdirF0mtuWWWz68eyNAt2u1FzzV3m3g00oIxmEr0U"
}
is_suspended
is_suspended est une valeur booléenne qui indique si un utilisateur est suspendu ou non. La valeur peut être gérée en appelant le Logto Management API ou en utilisant Admin Console.
Une fois qu'un utilisateur est suspendu, les jetons de rafraîchissement préalablement accordés seront immédiatement révoqués et l'utilisateur ne pourra plus être authentifié par Logto.
Référence des propriétés
Les propriétés suivantes (sauf password_encrypted et password_encryption_method) sont visibles sur le profil utilisateur, ce qui signifie que vous pouvez les interroger en utilisant Management API.
Nom | Type | Description | Unique | Requis |
---|---|---|---|---|
id | string | Identifiant unique | ✅ | ✅ |
username | string | Nom d'utilisateur pour la connexion | ✅ | ❌ |
primary_email | string | Email principal | ✅ | ❌ |
primary_phone | string | Numéro de téléphone principal | ✅ | ❌ |
name | string | Nom complet | ❌ | ❌ |
avatar | string | URL pointant vers l'image de l'avatar de l'utilisateur | ❌ | ❌ |
identities | object | Informations utilisateur récupérées lors de la connexion sociale | ❌ | ✅ |
custom_data | object | Informations supplémentaires dans les propriétés personnalisables | ❌ | ✅ |
application_id | string | ID de l'application que l'utilisateur a enregistrée en premier | ❌ | ✅ |
last_sign_in_at | date time | Timestamp de la dernière connexion de l'utilisateur | ❌ | ✅ |
password_encrypted | string | Mot de passe chiffré | ❌ | ❌ |
password_encryption_method | string | Méthode de chiffrement du mot de passe | ❌ | ❌ |
is_suspended | bool | Marque de suspension de l'utilisateur | ❌ | ✅ |
- Unique : Assure l'unicité des valeurs saisies dans une propriété d'une table de base de données.
- Requis : Assure que les valeurs saisies dans une propriété d'une table de base de données ne peuvent PAS être
null
.
Identités sociales
identities contient les informations utilisateur récupérées lors de la connexion sociale (c'est-à-dire la connexion avec un connecteur social). Chaque identities d'utilisateur est stockée dans un objet JSON individuel.
Les informations utilisateur varient selon le fournisseur d'identité sociale (c'est-à-dire la plateforme de réseau social), et elles incluent généralement les éléments suivants :
- target du fournisseur d'identité, tel que "facebook" ou "google"
- Identifiant unique de l'utilisateur pour ce fournisseur
- Nom de l'utilisateur
- Email vérifié de l'utilisateur
- Avatar de l'utilisateur
Le compte de l'utilisateur peut être lié à plusieurs fournisseurs d'identité sociale via la connexion sociale ; les informations utilisateur correspondantes récupérées auprès de ces fournisseurs seront stockées dans l'objet identities.
Exemple d'identities d'un utilisateur qui s'est connecté à la fois avec Google et Facebook :
{
"facebook": {
"userId": "5110888888888888",
"details": {
"id": "5110888888888888",
"name": "John Doe",
"email": "[email protected]",
"avatar": "https://example.com/avatar.png"
}
},
"google": {
"userId": "111000000000000000000",
"details": {
"id": "111000000000000000000",
"name": "John Doe",
"email": "[email protected]",
"avatar": "https://example.com/avatar.png"
}
}
}
Données personnalisées
custom_data stocke des informations utilisateur supplémentaires non répertoriées dans les propriétés utilisateur prédéfinies.
Vous pouvez utiliser custom_data pour faire les choses suivantes :
- Enregistrer si des actions spécifiques ont été effectuées par l'utilisateur, comme avoir vu la page d'accueil.
- Stocker des données spécifiques à l'application dans le profil utilisateur, telles que la langue et l'apparence préférées de l'utilisateur par application.
- Maintenir d'autres données arbitraires liées à l'utilisateur.
Exemple de custom_data d'un utilisateur administrateur dans Logto :
{
"adminConsolePreferences": {
"language": "en",
"appearanceMode": "system",
"experienceNoticeConfirmed": true
},
"customDataFoo": {
"foo": "foo"
},
"customDataBar": {
"bar": "bar"
}
}
Chaque custom_data d'utilisateur est stockée dans un objet JSON individuel.
NE METTEZ PAS de données sensibles dans custom_data
Vous pouvez récupérer un profil utilisateur contenant custom_data en utilisant Management API et l'envoyer aux applications frontend ou aux services backend externes. Par conséquent, mettre des informations sensibles dans custom_data peut entraîner des fuites de données.
Si vous souhaitez toujours mettre des informations sensibles dans custom_data, nous vous recommandons de les chiffrer d'abord. Chiffrez / déchiffrez-les uniquement dans une partie de confiance comme vos services backend, et évitez de le faire dans les applications frontend. Cela minimisera les pertes si les custom_data de vos utilisateurs sont divulguées par erreur.
Vous pouvez mettre à jour les custom_data de l'utilisateur en utilisant Admin Console ou Logto Management API, tel que PATCH /api/users/:userId
.
Mettez à jour avec précaution
La mise à jour des custom_data d'un utilisateur écrasera complètement son contenu original dans le stockage.
Par exemple, si votre entrée lors de l'appel de l'API de mise à jour custom_data ressemble à ceci (supposons que les custom_data originales soient les données d'exemple précédemment montrées) :
{
"customDataBaz": {
"baz": "baz"
}
}
alors la nouvelle valeur de custom_data après la mise à jour devrait être :
{
"customDataBaz": {
"baz": "baz"
}
}
C'est-à-dire que la valeur du champ mis à jour n'a rien à voir avec la valeur précédente.
Ressources connexes
Hub sécurisé pour les données utilisateur en mouvement