Structure des données du connecteur
Introduction
Qu'est-ce qu'un connecteur ?
Les connecteurs jouent un rôle crucial dans Logto. Grâce à eux, Logto permet aux utilisateurs finaux d'utiliser l'enregistrement ou la connexion sans mot de passe et les capacités de connexion avec des comptes sociaux. Avec la popularité croissante des sites web et des applications, les connexions sans mot de passe et sociales permettent aux utilisateurs d'éviter de gérer de nombreux comptes et mots de passe.
Suivez nos guides de connecteurs si vous souhaitez configurer un connecteur existant. Si vous ne trouvez pas le connecteur que vous souhaitez configurer, vous pouvez développer ces connecteurs en suivant les guides dans développez votre connecteur.
Compositions
Il y a de nombreuses propriétés dans les données du connecteur.
Pour rendre le chargement et la mise à jour des données plus efficaces, nous stockons une partie des données du connecteur qui sera modifiée fréquemment dans la base de données et le reste localement.
- Le stockage local, également connu sous le nom de ConnectorMetadata, est un objet contenant des propriétés fixes telles que le logo, le type de connecteur, etc. (:face_with_monocle: Vous avez du mal à comprendre ces propriétés ? Pas de souci, une explication détaillée vient plus tard !)
- Le stockage distant est stocké dans la base de données en raison des changements relativement fréquents de ces données.
Stockage local du connecteur : ConnectorMetadata
id
id est une clé unique de type chaîne pour identifier un connecteur dans Logto.
Elle est attribuée par les développeurs de chaque connecteur et sera téléchargée dans la base de données.
target (Nom du fournisseur d'identité)
target est une chaîne en minuscules pour distinguer la source des identités sociales du connecteur social.
Les utilisateurs de Logto peuvent considérer cette variable comme le "Nom du fournisseur d'identité" pour une meilleure compréhension.
Par exemple, votre target devrait être google si vous vous connectez à Logto avec votre compte Google. La valeur de target peut être une chaîne non vide arbitraire, mais nous vous encourageons à la garder simple car vous ne pouvez pas la changer. Nous n'autorisons PAS l'existence de plusieurs connecteurs avec le même target et la même plateforme. D'autre part, vous pouvez avoir des connecteurs sociaux pour différentes plateformes partageant le même target. Par exemple, si les utilisateurs veulent se connecter via WeChat sur leur téléphone, une application WeChat native est requise selon les conditions d'utilisation de WeChat ; en même temps, une application web WeChat est également nécessaire pour permettre la connexion aux applications web. Ces deux applications WeChat partagent le même fournisseur d'identité et devraient avoir le même target.
Nous avons conclu différents cas d'utilisation et suggestions pour les utilisateurs puisque target est un concept compliqué.
Exemple | Scénario | Résultat | Recommandé ? | |
---|---|---|---|---|
Différents IdP et différents targets | 1. Connecteur GitHub (target : github ) 2. Connecteur Google (target : google ) | Une application qui prend en charge la connexion avec un compte GitHub et Google. | Cas d'utilisation les plus courants. | ✅ |
Différents IdP et même target | 1. Connecteur GitHub (target : github ) 2. Connecteur Google (target : github ) | N/A | Il est possible pour un utilisateur de se connecter à un compte Logto créé à l'aide du compte GitHub d'un autre utilisateur. | ❌ |
Même IdP et différents targets | 1. Connecteur GitHub (target : github ) 2. Connecteur OAuth GitHub (target : github_oauth ) | Le connecteur GitHub est utilisé pour l'application A, tandis que le connecteur OAuth GitHub a été créé spécifiquement pour l'application B. | Se connecter à Logto en utilisant ces deux connecteurs différents créera toujours des comptes Logto séparés - même si l'utilisateur utilise le même compte GitHub. | Diviser votre pool d'utilisateurs est le seul scénario où vous auriez besoin d'utiliser les deux connecteurs. Cependant, il est généralement considéré comme une bonne pratique de créer deux locataires distincts pour gérer ce cas d'utilisation. |
Même IdP et même target | 1. Connecteur GitHub (target : github ) 2. Connecteur OAuth GitHub (target : github ) | N/A | Utiliser l'un ou l'autre de ces deux connecteurs peut aboutir au même résultat. | Créer deux connecteurs qui font essentiellement la même chose peut être déroutant pour les utilisateurs finaux et n'a pas beaucoup de sens. Il est préférable d'utiliser un connecteur qui correspond à votre cas d'utilisation spécifique. |
type
type est la propriété qui enregistre le type du connecteur.
Nous définissons les connecteurs en trois types différents, basés sur leurs fonctionnalités :
- Social : Connecteurs qui peuvent accéder aux informations des utilisateurs à partir de médias sociaux tiers arbitraires avec l'autorisation des utilisateurs finaux.
- SMS : Connecteurs permettant aux utilisateurs finaux de recevoir des messages texte sur leur téléphone.
- Email : Connecteurs qui peuvent aider à envoyer des e-mails aux utilisateurs finaux.
platform
platform est utilisé pour identifier pour quelle plateforme le connecteur est construit.
platform doit être soit null
, soit l'une des valeurs de type chaîne suivantes :
- Native : Connecteurs qui fonctionnent UNIQUEMENT pour les applications mobiles natives.
- Web : Connecteurs qui fonctionnent UNIQUEMENT sur les applications web de bureau.
- Universal : Connecteurs qui peuvent fonctionner à la fois sur les applications web mobiles et les applications web de bureau.
Le platform des connecteurs email et des connecteurs SMS doit toujours être null
.
SEULS les connecteurs sociaux peuvent avoir des valeurs platform non nulles.
name
name est un objet dont les clés sont des codes pays i18n et les valeurs sont le nom d'affichage des connecteurs.
description
description est également un objet dont les clés sont des codes pays i18n et les valeurs sont de brèves descriptions des connecteurs.
Pour prendre en charge l'affichage i18n côté client, nous stockons les propriétés name (ainsi que description) sous forme de carte, qui utilise les codes pays comme clé, le nom (ou la description) en caractères locaux comme valeur.
logo
logo est une URL ou un chemin relatif du logo du connecteur.
logoDark
logoDark est une URL nullable ou un chemin relatif du logo du connecteur en mode sombre.
logo est toujours requis, et logoDark est facultatif.
Nous affichons logo en mode clair et logoDark en mode sombre s'il existe. Sinon, nous reviendrons à afficher logo en mode sombre.
isStandard
isStandard est un attribut booléen OPTIONNEL pour identifier si le connecteur social est un connecteur "standard". Vous pouvez identifier un connecteur "standard" par son attribut isStandard
véridique.
Logto ne prend en charge que les connecteurs sociaux "standards". Autrement dit, tous les connecteurs Email ou SMS de Logto ne sont PAS "standards".
Logto appelle les connecteurs construits sur des protocoles ouverts et standards (par exemple, OAuth, OIDC, SAML, etc.) des connecteurs "standards". Les utilisateurs de Logto sont censés construire plusieurs instances sur chaque connecteur standard dans ce contexte. Par exemple, supposons que Logto ait déjà fourni un connecteur standard OAuth, les utilisateurs peuvent créer des instances "Connecteur OAuth GitHub", "Connecteur OAuth Google" et "Connecteur OAuth Facebook". Ils sont tous basés sur le connecteur standard OAuth de Logto.
Si vous êtes familier avec la conception des connecteurs de Logto, au plus UN connecteur Email ou SMS peut exister en même temps, ce qui signifie que Logto n'a pas besoin de connecteurs Email ou SMS "standards" à ce stade.
readme
readme est un chemin relatif du fichier README markdown du connecteur dont les contextes apparaîtront dans la "Console d'administration" lors de la configuration des connecteurs.
configTemplate
configTemplate est un chemin relatif de l'exemple de configuration du connecteur.
Stockage distant du connecteur : Connector DB
id
id, qui fonctionne comme clé primaire de la base de données du connecteur, est une clé de type chaîne générée aléatoirement pour identifier le connecteur dans la base de données.
connectorId
connectorId est une clé de type chaîne et est le SEUL lien pour aligner Connector DB et ConnectorMetadata. Pour chaque paire de données de base de données de connecteur et de module de code de connecteur correspondante, connectorId est toujours égal à metadata.id du module de code.
metadata
metadata est un sous-ensemble de ConnectorMetadata, qui contient des attributs configurables, c'est-à-dire logo, logoDark, target et name.
syncProfile
syncProfile est une valeur booléenne pour déterminer le schéma de mise à jour du profil utilisateur, par défaut à FALSE.
Si syncProfile est FALSE, les informations de base de l'utilisateur Logto (y compris le nom et l'avatar) seront mises à jour uniquement lorsque l'utilisateur s'inscrit pour la première fois à Logto via ce connecteur. Sinon, chaque fois que les utilisateurs se connectent à Logto via le connecteur, le profil du compte Logto sera mis à jour.
config
config peut être un objet non vide arbitraire.
C'est là qu'un connecteur stocke sa configuration. Chaque connecteur a différentes propriétés dans config et il est obligé d'être valide (les connecteurs ont des normes différentes pour "valide") avant d'être enregistré dans la base de données. SEULS les config qui passent le contrôle de validité peuvent être mis à jour dans la base de données, sinon une erreur sera lancée.
Les développeurs sont tenus de mettre en œuvre une protection config lors du développement de leurs propres connecteurs, voir développez votre connecteur pour plus de détails.
Vous voulez avoir un aperçu des exemples de config ? Allez sur connecteurs ou sur la page des paramètres de chaque connecteur.
Dans la version actuelle de Logto, un seul connecteur Email/SMS peut exister en même temps, tous les autres connecteurs du même type sont automatiquement supprimés.
La règle, connecteur Email ou SMS unique en fonctionnement, ne s'applique pas aux connecteurs Sociaux.
En d'autres termes, vous pouvez ajouter plusieurs connecteurs Sociaux.
createdAt
createdAt est une chaîne de timestamp générée automatiquement pour suivre le moment où un connecteur est créé dans la base de données.