Structure des données utilisateur
Les utilisateurs sont les entités centrales dans le service d'identité. Dans Logto, ils incluent des données d'authentification 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 etcustom_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 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 la connexion 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. Elle est sensible à la casse.
primary_email
primary_email est l'adresse email de l'utilisateur, utilisée pour la connexion avec l'email et le mot de passe / code de vérification.
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 la connexion avec le numéro de téléphone et le mot de passe / code de vérification 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 standard claims 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 inscrit 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 crypté 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 le cryptage doit comporter au moins six caractères.
password_encryption_method
password_encryption_method est utilisé pour crypter 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 cryptage 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 Logto 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 | ❌ | ❌ |
identities | object | Infos utilisateur récupérées lors de la connexion sociale | ❌ | ✅ |
custom_data | object | Infos supplémentaires dans des propriétés personnalisables | ❌ | ✅ |
application_id | string | ID de l'application à laquelle l'utilisateur s'est inscrit | ❌ | ✅ |
last_sign_in_at | date time | Timestamp de la dernière connexion | ❌ | ✅ |
password_encrypted | string | Mot de passe crypté | ❌ | ❌ |
password_encryption_method | string | Méthode de cryptage 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é 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é dans un objet JSON individuel.
Note : NE PAS mettre 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 crypter d'abord. Cryptez/décryptez-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 le custom_data de l'utilisateur en utilisant Logto Console ou Logto Management API, tel que PATCH /api/users/:userId
.
Mettez à jour avec précaution
La mise à jour du 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 le custom_data original soit l'exemple de données montré précédemment) :
{
"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 associées
Hub sécurisé pour les données utilisateur en mouvement