Structure des données utilisateur
Les utilisateurs sont les entités centrales du 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 possède 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'e-mail, 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 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. Elle est sensible à la casse.
primary_email
primary_email est l'adresse e-mail de l'utilisateur, utilisée pour se connecter avec l'e-mail et le mot de passe / code de vérification.
Sa valeur provient généralement de l'adresse e-mail 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 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 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_sign_in_at
last_sign_in_at est le timestamp avec le fuseau horaire lorsque l'utilisateur s'est connecté pour la dernière fois.
created_at
created_at est le timestamp avec le fuseau horaire lorsque l'utilisateur a enregistré le compte.
updated_at
updated_at est le timestamp avec le fuseau horaire lorsque les informations du profil utilisateur ont été mises à jour pour la dernière fois.
has_password
has_password est une valeur booléenne qui indique si l'utilisateur a un mot de passe. Vous pouvez voir et gérer ce statut, y compris définir un nouveau mot de passe ou réinitialiser le mot de passe sur la page de détail de Console > Gestion des utilisateurs.
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 le 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 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.
mfa_verification_factors
mfa_verification_factors est un tableau qui répertorie les méthodes d'authentification multi-facteurs (MFA) associées au compte de l'utilisateur. Les valeurs possibles incluent : Totp (OTP de l'application Authenticator), WebAuthn (Passkey), et BackupCode.
mfaVerificationFactors: ("Totp" | "WebAuthn" | "BackupCode")[];
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
- E-mail 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"
}
}
}
Identités SSO
sso_identities contient les informations utilisateur récupérées lors de SSO d’entreprise (c'est-à-dire connexion par authentification unique avec un connecteur d'entreprise). Chaque ssoIdentities d'utilisateur est stocké dans un objet JSON individuel.
Les données synchronisées à partir du fournisseur d'identité SSO dépendent des portées configurées dans le connecteur d'entreprise à demander. Voici une copie de la définition de type TypeScript :
type SSOIdentity = {
issuer: string;
identityId: string;
detail: JsonObject; // Voir https://github.com/withtyped/withtyped/blob/master/packages/server/src/types.ts#L12
};
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 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 le custom_data de vos utilisateurs est divulgué 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 remplacera 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 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.
Référence des propriétés
Les colonnes de la table utilisateur de la base de données 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 | E-mail 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 | ❌ | ❌ |
profile | object | Profil 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 à laquelle l'utilisateur s'est inscrit pour la première fois | ❌ | ✅ |
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 | ❌ | ✅ |
mfa_verifications | object[] | Facteurs de vérification MFA | ❌ | ✅ |
- 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
.
Ressources associées
Hub sécurisé pour les données utilisateur en mouvement