Passer au contenu principal

Concepts de base

En tant qu'administrateur de Casdoor, vous devriez être familier avec au moins quatre concepts de base : Organisation, Utilisateur, Application et Fournisseur.

conseil

Dans les parties suivantes, nous utiliserons le site de démonstration https://door.casdoor.com comme exemple.

Organisation

Dans Casdoor, une organisation est un conteneur pour les utilisateurs et les applications. Par exemple, tous les employés d'une entreprise ou tous les clients d'une entreprise peuvent être abstraits en une seule organisation. La définition de la classe Organisation est montrée ci-dessous :

type Organization struct {
Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
Name string `xorm:"varchar(100) notnull pk" json:"name"`
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`

DisplayName string `xorm:"varchar(100)" json:"displayName"`
WebsiteUrl string `xorm:"varchar(100)" json:"websiteUrl"`
Favicon string `xorm:"varchar(100)" json:"favicon"`
PasswordType string `xorm:"varchar(100)" json:"passwordType"`
PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"`
PhonePrefix string `xorm:"varchar(10)" json:"phonePrefix"`
DefaultAvatar string `xorm:"varchar(100)" json:"defaultAvatar"`
Tags []string `xorm:"mediumtext" json:"tags"`
MasterPassword string `xorm:"varchar(100)" json:"masterPassword"`
EnableSoftDeletion bool `json:"enableSoftDeletion"`
IsProfilePublic bool `json:"isProfilePublic"`

AccountItems []*AccountItem `xorm:"varchar(2000)" json:"accountItems"`
}

Utilisateur

Dans Casdoor, un utilisateur peut se connecter à une application. Chaque utilisateur peut appartenir à une seule organisation mais peut se connecter à plusieurs applications appartenant à l'organisation. Actuellement, il existe deux types d'utilisateurs dans Casdoor :

  • les utilisateurs de l'organisation built-in, tels que built-in/admin : administrateurs globaux qui ont un pouvoir administratif complet sur la plateforme Casdoor.
  • les utilisateurs d'autres organisations, tels que my-company/alice : utilisateurs normaux qui peuvent s'inscrire, se connecter, se déconnecter, changer leur propre profil, etc.

Dans l'API Casdoor, un utilisateur est typiquement identifié comme <nom_de_l'organisation>/<nom_d'utilisateur>. Par exemple, l'administrateur par défaut de Casdoor est dénoté comme built-in/admin. De plus, la définition de la classe Utilisateur inclut une propriété id, qui est un UUID comme d835a48f-2e88-4c1f-b907-60ac6b6c1b40 et peut être choisi comme ID d'utilisateur par une application.

conseil

Pour les applications qui sont uniquement pour une organisation, il est possible d'utiliser <nom_d'utilisateur> au lieu de <nom_de_l'organisation>/<nom_d'utilisateur> comme ID d'utilisateur dans l'application pour simplifier.

Voici la définition de la classe Utilisateur :

type User struct {
Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
Name string `xorm:"varchar(100) notnull pk" json:"name"`
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
UpdatedTime string `xorm:"varchar(100)" json:"updatedTime"`

Id string `xorm:"varchar(100)" json:"id"`
Type string `xorm:"varchar(100)" json:"type"`
Password string `xorm:"varchar(100)" json:"password"`
PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"`
DisplayName string `xorm:"varchar(100)" json:"displayName"`
Avatar string `xorm:"varchar(500)" json:"avatar"`
PermanentAvatar string `xorm:"varchar(500)" json:"permanentAvatar"`
Email string `xorm:"varchar(100) index" json:"email"`
Phone string `xorm:"varchar(100) index" json:"phone"`
Location string `xorm:"varchar(100)" json:"location"`
Address []string `json:"address"`
Affiliation string `xorm:"varchar(100)" json:"affiliation"`
Title string `xorm:"varchar(100)" json:"title"`
IdCardType string `xorm:"varchar(100)" json:"idCardType"`
IdCard string `xorm:"varchar(100) index" json:"idCard"`
Homepage string `xorm:"varchar(100)" json:"homepage"`
Bio string `xorm:"varchar(100)" json:"bio"`
Tag string `xorm:"varchar(100)" json:"tag"`
Region string `xorm:"varchar(100)" json:"region"`
Language string `xorm:"varchar(100)" json:"language"`
Gender string `xorm:"varchar(100)" json:"gender"`
Birthday string `xorm:"varchar(100)" json:"birthday"`
Education string `xorm:"varchar(100)" json:"education"`
Score int `json:"score"`
Ranking int `json:"ranking"`
IsDefaultAvatar bool `json:"isDefaultAvatar"`
IsOnline bool `json:"isOnline"`
IsAdmin bool `json:"isAdmin"`
IsGlobalAdmin bool `json:"isGlobalAdmin"`
IsForbidden bool `json:"isForbidden"`
IsDeleted bool `json:"isDeleted"`
SignupApplication string `xorm:"varchar(100)" json:"signupApplication"`
Hash string `xorm:"varchar(100)" json:"hash"`
PreHash string `xorm:"varchar(100)" json:"preHash"`

CreatedIp string `xorm:"varchar(100)" json:"createdIp"`
LastSigninTime string `xorm:"varchar(100)" json:"lastSigninTime"`
LastSigninIp string `xorm:"varchar(100)" json:"lastSigninIp"`

Github string `xorm:"varchar(100)" json:"github"`
Google string `xorm:"varchar(100)" json:"google"`
QQ string `xorm:"qq varchar(100)" json:"qq"`
WeChat string `xorm:"wechat varchar(100)" json:"wechat"`
Facebook string `xorm:"facebook varchar(100)" json:"facebook"`
DingTalk string `xorm:"dingtalk varchar(100)" json:"dingtalk"`
Weibo string `xorm:"weibo varchar(100)" json:"weibo"`
Gitee string `xorm:"gitee varchar(100)" json:"gitee"`
LinkedIn string `xorm:"linkedin varchar(100)" json:"linkedin"`
Wecom string `xorm:"wecom varchar(100)" json:"wecom"`
Lark string `xorm:"lark varchar(100)" json:"lark"`
Gitlab string `xorm:"gitlab varchar(100)" json:"gitlab"`
Apple string `xorm:"apple varchar(100)" json:"apple"`
AzureAD string `xorm:"azuread varchar(100)" json:"azuread"`
Slack string `xorm:"slack varchar(100)" json:"slack"`

Ldap string `xorm:"ldap varchar(100)" json:"ldap"`
Properties map[string]string `json:"properties"`
}

Application

Une application représente un service web qui doit être protégé par Casdoor, tel qu'un site de forum, un système OA ou un système CRM.

type Application struct {
Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
Name string `xorm:"varchar(100) notnull pk" json:"name"`
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`
DisplayName string `xorm:"varchar(100)" json:"displayName"`
Logo string `xorm:"varchar(100)" json:"logo"`
HomepageUrl string `xorm:"varchar(100)" json:"homepageUrl"`
Description string `xorm:"varchar(100)" json:"description"`
Organization string `xorm:"varchar(100)" json:"organization"`
Cert string `xorm:"varchar(100)" json:"cert"`
EnablePassword bool `json:"enablePassword"`
EnableSignUp bool `json:"enableSignUp"`
EnableSigninSession bool `json:"enableSigninSession"`
EnableCodeSignin bool `json:"enableCodeSignin"`
Providers []*ProviderItem `xorm:"mediumtext" json:"providers"`
SignupItems []*SignupItem `xorm:"varchar(1000)" json:"signupItems"`
OrganizationObj *Organization `xorm:"-" json:"organizationObj"`
ClientId string `xorm:"varchar(100)" json:"clientId"`
ClientSecret string `xorm:"varchar(100)" json:"clientSecret"`
RedirectUris []string `xorm:"varchar(1000)" json:"redirectUris"`
TokenFormat string `xorm:"varchar(100)" json:"tokenFormat"`
ExpireInHours int `json:"expireInHours"`
RefreshExpireInHours int `json:"refreshExpireInHours"`
SignupUrl string `xorm:"varchar(200)" json:"signupUrl"`
SigninUrl string `xorm:"varchar(200)" json:"signinUrl"`
ForgetUrl string `xorm:"varchar(200)" json:"forgetUrl"`
AffiliationUrl string `xorm:"varchar(100)" json:"affiliationUrl"`
TermsOfUse string `xorm:"varchar(100)" json:"termsOfUse"`
SignupHtml string `xorm:"mediumtext" json:"signupHtml"`
SigninHtml string `xorm:"mediumtext" json:"signinHtml"`
}

Chaque application peut avoir sa propre page d'inscription personnalisée, sa page de connexion et plus encore. La page de connexion racine /login (par exemple, https://door.casdoor.com/login) est la page de connexion uniquement pour l'application intégrée de Casdoor : app-built-in.

Une application est un « portail » ou une « interface » permettant à un utilisateur de se connecter à Casdoor. Un utilisateur doit passer par la page de connexion d'une application pour se connecter à Casdoor.

ApplicationURL de la page d'inscriptionURL de la page de connexion
app-built-inhttps://door.casdoor.com/signuphttps://door.casdoor.com/login
app-casnodehttps://door.casdoor.com/signup/app-casnodehttps://door.casdoor.com/login/oauth/authorize?client_id=014ae4bd048734ca2dea&response_type=code&redirect_uri=http://localhost:9000/callback&scope=read&state=casdoor
app-casbin-oahttps://door.casdoor.com/signup/app-casbin-oahttps://door.casdoor.com/login/oauth/authorize?client_id=0ba528121ea87b3eb54d&response_type=code&redirect_uri=http://localhost:9000/callback&scope=read&state=casdoor

URLs de connexion

Il est très facile de se connecter à Casdoor via l'application intégrée de Casdoor ; il suffit de visiter la page d'accueil du serveur Casdoor (par exemple, https://door.casdoor.com pour le site de démo) et cela vous redirigera automatiquement vers /login. Mais comment obtenir les URLs pour d'autres applications dans le code frontend et backend ? Vous pouvez soit concaténer des chaînes manuellement, soit appeler certaines fonctions utilitaires fournies par les SDKs Casdoor pour obtenir les URLs :

1. Concaténation manuelle des chaînes

  • URL de la page d'inscription
    • Inscription pour l'application spécifiée : <votre-nom-d'hôte-casdoor>/signup/<nom-de-votre-application>
    • Inscription par OAuth : <votre-nom-d'hôte-casdoor>/signup/oauth/authorize?client_id=<client-id-de-votre-application>&response_type=code&redirect_uri=<redirect-uri-de-votre-application>&&scope=read&state=casdoor
    • Inscription automatique : <votre-nom-d'hôte-casdoor>/auto-signup/oauth/authorize?client_id=<client-id-de-votre-application>&response_type=code&redirect_uri=<redirect-uri-de-votre-application>&&scope=read&state=casdoor
  • URL de la page de connexion
    • Connexion pour l'organisation spécifiée : <votre-nom-d'hôte-casdoor>/login/<nom-de-votre-organisation>
    • Connexion par OAuth : <votre-nom-d'hôte-casdoor>/login/oauth/authorize?client_id=<client-id-de-votre-application>&response_type=code&redirect_uri=<redirect-uri-de-votre-application>&&scope=read&state=casdoor

2. Utilisation du SDK frontend (pour le code JavaScript frontend utilisant React, Vue ou Angular)

getSignupUrl() et getSigninUrl() : casdoor-js-sdk

3. Utilisation du SDK backend (pour le code backend utilisant Go, Java, etc.)

GetSignupUrl() et GetSigninUrl() : casdoor-go-sdk

Fournisseur

Casdoor est un système de connexion unique fédéré qui prend en charge plusieurs fournisseurs d'identité via OIDC, OAuth et SAML. Casdoor peut également envoyer des codes de vérification ou d'autres notifications aux utilisateurs par e-mail ou SMS. Casdoor utilise le concept de Fournisseur pour gérer tous ces connecteurs tiers.

Une liste de tous les fournisseurs pris en charge par Casdoor peut être trouvée à provider/overview.

type Provider struct {
Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
Name string `xorm:"varchar(100) notnull pk" json:"name"`
CreatedTime string `xorm:"varchar(100)" json:"createdTime"`

DisplayName string `xorm:"varchar(100)" json:"displayName"`
Category string `xorm:"varchar(100)" json:"category"`
Type string `xorm:"varchar(100)" json:"type"`
Method string `xorm:"varchar(100)" json:"method"`
ClientId string `xorm:"varchar(100)" json:"clientId"`
ClientSecret string `xorm:"varchar(100)" json:"clientSecret"`
ClientId2 string `xorm:"varchar(100)" json:"clientId2"`
ClientSecret2 string `xorm:"varchar(100)" json:"clientSecret2"`

Host string `xorm:"varchar(100)" json:"host"`
Port int `json:"port"`
Title string `xorm:"varchar(100)" json:"title"`
Content string `xorm:"varchar(1000)" json:"content"`

RegionId string `xorm:"varchar(100)" json:"regionId"`
SignName string `xorm:"varchar(100)" json:"signName"`
TemplateCode string `xorm:"varchar(100)" json:"templateCode"`
AppId string `xorm:"varchar(100)" json:"appId"`

Endpoint string `xorm:"varchar(1000)" json:"endpoint"`
IntranetEndpoint string `xorm:"varchar(100)" json:"intranetEndpoint"`
Domain string `xorm:"varchar(100)" json:"domain"`
Bucket string `xorm:"varchar(100)" json:"bucket"`

Metadata string `xorm:"mediumtext" json:"metadata"`
IdP string `xorm:"mediumtext" json:"idP"`
IssuerUrl string `xorm:"varchar(100)" json:"issuerUrl"`
EnableSignAuthnRequest bool `json:"enableSignAuthnRequest"`

ProviderUrl string `xorm:"varchar(200)" json:"providerUrl"`
}

Comment Casdoor se gère-t-il lui-même ?

Lors de la première exécution de Casdoor, certains objets intégrés sont créés pour faciliter sa gestion :

  • Une organisation intégrée nommée built-in.
  • Un utilisateur nommé admin dans l'organisation built-in.
  • Une application intégrée nommée app-built-in, administrée par l'organisation built-in, représentant Casdoor lui-même.

Tous les utilisateurs sous l'organisation built-in, y compris admin, auront des privilèges d'administrateur complet sur la plateforme Casdoor. Par conséquent, s'il y a plusieurs administrateurs, il est conseillé de créer de nouveaux comptes sous l'organisation built-in. Alternativement, le canal d'inscription pour l'application app-built-in devrait être fermé pour prévenir l'accès non désiré.

prudence

Il n'est pas possible de renommer ou de supprimer les objets intégrés via l'interface web ou l'API RESTful. Casdoor a codé en dur ces noms réservés à de nombreux endroits ; tenter de les renommer ou de les supprimer en modifiant la DB peut provoquer un crash du système entier.