Zum Hauptinhalt springen

Kernkonzepte

Als Casdoor-Administrator sollten Sie mit mindestens vier Kernkonzepten vertraut sein: Organisation, Benutzer, Anwendung und Anbieter.

Tipp

In den folgenden Teilen werden wir die Demo-Seite https://door.casdoor.com als Beispiel verwenden.

Organisation

In Casdoor ist eine Organisation ein Behälter für Benutzer und Anwendungen. Zum Beispiel können alle Mitarbeiter eines Unternehmens oder alle Kunden eines Geschäfts als eine Organisation abstrahiert werden. Die Klassendefinition von Organisation wird unten gezeigt:

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"`
}

Benutzer

In Casdoor kann sich ein Benutzer in eine Anwendung einloggen. Jeder Benutzer kann nur zu einer Organisation gehören, sich aber in mehrere Anwendungen einloggen, die der Organisation gehören. Derzeit gibt es zwei Arten von Benutzern in Casdoor:

  • Benutzer der built-in Organisation, wie built-in/admin: globale Administratoren, die volle administrative Macht auf der Casdoor-Plattform haben.
  • Benutzer anderer Organisationen, wie my-company/alice: normale Benutzer, die sich registrieren, anmelden, abmelden, ihr eigenes Profil ändern usw. können.

In der Casdoor-API wird ein Benutzer typischerweise als <organization_name>/<username> identifiziert. Zum Beispiel wird der Standardadministrator von Casdoor als built-in/admin bezeichnet. Zusätzlich beinhaltet die Klassendefinition von Benutzer eine id-Eigenschaft, die eine UUID wie d835a48f-2e88-4c1f-b907-60ac6b6c1b40 ist und als Benutzer-ID von einer Anwendung gewählt werden kann.

Tipp

Für Anwendungen, die nur für eine Organisation sind, ist es möglich, <username> anstelle von <organization_name>/<username> als Benutzer-ID in der Anwendung zu verwenden, um es einfacher zu machen.

Hier ist die Klassendefinition von Benutzer:

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"`
}

Anwendung

Ein Anwendung repräsentiert einen Webdienst, der durch Casdoor geschützt werden muss, wie eine Forumseite, ein OA-System oder ein CRM-System.

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"`
}

Jede Anwendung kann ihre eigene angepasste Registrierungsseite, Anmeldeseite und mehr haben. Die Hauptanmeldeseite /login (z.B. https://door.casdoor.com/login) ist die Anmeldeseite nur für Casdoors eingebaute Anwendung: app-built-in.

Eine Anwendung ist ein "Portal" oder "Interface" für einen Benutzer, um sich bei Casdoor anzumelden. Ein Benutzer muss über die Anmeldeseite einer Anwendung gehen, um sich bei Casdoor anzumelden.

AnwendungRegistrierungsseiten-URLAnmeldeseiten-URL
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

Login-URLs

Es ist sehr einfach, sich über Casdoors eingebaute Anwendung bei Casdoor anzumelden; besuchen Sie einfach die Startseite des Casdoor-Servers (z.B. https://door.casdoor.com für die Demo-Seite) und Sie werden automatisch zu /login weitergeleitet. Aber wie bekommt man die URLs für andere Anwendungen im Frontend- und Backend-Code? Sie können entweder Strings manuell verketten oder einige Hilfsfunktionen aufrufen, die von den Casdoor SDKs bereitgestellt werden, um die URLs zu erhalten:

1. Manuelles Verketten von Strings

  • Registrierungsseiten-URL
    • Registrierung für die spezifizierte Anwendung: <your-casdoor-hostname>/signup/<your-application-name>
    • Registrierung über OAuth: <your-casdoor-hostname>/signup/oauth/authorize?client_id=<client-id-for-your-application>&response_type=code&redirect_uri=<redirect-uri-for-your-application>&&scope=read&state=casdoor
    • Automatische Registrierung: <your-casdoor-hostname>/auto-signup/oauth/authorize?client_id=<client-id-for-your-application>&response_type=code&redirect_uri=<redirect-uri-for-your-application>&&scope=read&state=casdoor
  • Anmeldeseiten-URL
    • Anmeldung für die spezifizierte Organisation: <your-casdoor-hostname>/login/<your-organization-name>
    • Anmeldung über OAuth: <your-casdoor-hostname>/login/oauth/authorize?client_id=<client-id-for-your-application>&response_type=code&redirect_uri=<redirect-uri-for-your-application>&&scope=read&state=casdoor

2. Verwendung des Frontend-SDK (für Frontend-JavaScript-Code mit React, Vue oder Angular)

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

3. Verwendung des Backend-SDK (für Backend-Code mit Go, Java usw.)

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

Anbieter

Casdoor ist ein föderiertes Single-Sign-On-System, das mehrere Identitätsanbieter über OIDC, OAuth und SAML unterstützt. Casdoor kann auch Verifizierungscodes oder andere Benachrichtigungen an Benutzer per E-Mail oder SMS senden. Casdoor verwendet das Konzept des Anbieters, um all diese Drittanbieter-Connectors zu verwalten.

Eine Liste aller von Casdoor unterstützten Anbieter finden Sie unter 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"`
}

Wie verwaltet Casdoor sich selbst?

Beim ersten Start von Casdoor werden einige eingebaute Objekte erstellt, um seine Verwaltung zu erleichtern:

  • Eine eingebaute Organisation namens built-in.
  • Ein Benutzer namens admin in der Organisation built-in.
  • Eine eingebaute Anwendung namens app-built-in, verwaltet von der Organisation built-in, die Casdoor selbst darstellt.

Alle Benutzer unter der Organisation built-in, einschließlich admin, haben volle Administratorrechte auf der Casdoor-Plattform. Daher ist es ratsam, neue Konten unter der Organisation built-in zu erstellen, wenn es mehrere Administratoren gibt. Alternativ sollte der Registrierungskanal für die Anwendung app-built-in geschlossen werden, um unerwünschten Zugriff zu verhindern.

Vorsicht

Es ist nicht möglich, die eingebauten Objekte über die Web-Oberfläche oder die RESTful-API umzubenennen oder zu löschen. Casdoor hat diese reservierten Namen an vielen Stellen hartkodiert; der Versuch, sie durch Ändern der DB umzubenennen oder zu löschen, kann das gesamte System zum Absturz bringen.