メインコンテンツにスキップ

コアコンセプト

Casdoor管理者として、少なくとも4つのコアコンセプト:OrganizationUserApplicationProviderを理解している必要があります。

ヒント

以下の部分では、デモサイトhttps://door.casdoor.comを例として使用します。

組織

Casdoorでは、組織はユーザーとアプリケーションのコンテナです。 例えば、会社の全従業員やビジネスの全顧客を一つの組織として抽象化することができます。 Organizationクラスの定義は以下の通りです:

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

ユーザー

Casdoorでは、ユーザーはアプリケーションにログインできます。 各ユーザーは一つの組織にのみ属することができますが、その組織が所有する複数のアプリケーションにログインすることができます。 現在、Casdoorには2種類のユーザーがいます:

  • built-in組織のユーザー、例えばbuilt-in/admin:Casdoorプラットフォーム上で完全な管理権限を持つグローバル管理者。
  • 他の組織のユーザー、例えばmy-company/alice:サインアップ、サインイン、サインアウト、自分のプロフィールの変更などができる通常のユーザー。

Casdoor APIでは、ユーザーは通常<organization_name>/<username>として識別されます。 例えば、Casdoorのデフォルト管理者はbuilt-in/adminとして表されます。 さらに、Userクラスの定義にはidプロパティが含まれており、これはd835a48f-2e88-4c1f-b907-60ac6b6c1b40のようなUUIDであり、アプリケーションによってユーザーIDとして選択されることがあります。

ヒント

一つの組織のみのアプリケーションの場合、アプリケーション全体でユーザーIDとして<username>のみを使用することも可能です。

こちらがUserクラスの定義です:

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

アプリケーション

アプリケーションは、フォーラムサイト、OAシステム、CRMシステムなど、Casdoorによって保護される必要があるWebサービスを表します。

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

各アプリケーションは、独自のサインアップページ、サインインページなどを持つことができます。 ルートログインページ/login(例:https://door.casdoor.com/login)は、Casdoorの組み込みアプリケーションapp-built-in専用のサインインページです。

アプリケーションはユーザーがCasdoorにログインするための「ポータル」または「インターフェース」です。 ユーザーはCasdoorにログインするために、あるアプリケーションのサインインページを通過する必要があります。

アプリケーションサインアップページのURLサインインページの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

ログインURL

Casdoorの組み込みアプリケーションを介してCasdoorにログインするのは非常に簡単です。デモサイトの場合はCasdoorサーバーのホームページ(例:https://door.casdoor.com)を訪れると、自動的に/loginにリダイレクトされます。 しかし、フロントエンドとバックエンドのコードで他のアプリケーションのURLを取得するにはどうすればよいでしょうか? 文字列を手動で連結するか、Casdoor SDKが提供するいくつかのユーティリティ関数を呼び出してURLを取得することができます:

1. 文字列を手動で連結する

  • サインアップページのURL
    • 指定されたアプリケーションのサインアップ:<your-casdoor-hostname>/signup/<your-application-name>
    • 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
    • 自動サインアップ:<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
  • サインインページのURL
    • 指定された組織のサインイン:<your-casdoor-hostname>/login/<your-organization-name>
    • 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. フロントエンドSDKを使用する(React、Vue、Angularを使用するフロントエンドJavaScriptコード用)

getSignupUrl()getSigninUrl()casdoor-js-sdk

3. バックエンドSDKを使用する(Go、Javaなどを使用するバックエンドコード用)

GetSignupUrl()GetSigninUrl()casdoor-go-sdk

プロバイダー

CasdoorはOIDC、OAuth、SAMLを介して複数のアイデンティティプロバイダーをサポートする連合型シングルサインオンシステムです。 Casdoorは、メールやSMSを介してユーザーに確認コードやその他の通知を送信することもできます。 CasdoorはProviderの概念を使用して、これらのサードパーティコネクターを管理します。

Casdoorがサポートするすべてのプロバイダーのリストは、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"`
}

Casdoorは自身をどのように管理していますか?

Casdoorを初めて実行すると、その管理を容易にするためにいくつかの組み込みオブジェクトが作成されます:

  • built-inという名前の組み込み組織。
  • built-in組織のadminという名前のユーザー。
  • app-built-inという名前の組み込みアプリケーションで、built-in組織によって管理され、Casdoor自体を表します。

built-in組織のすべてのユーザー、adminを含む、はCasdoorプラットフォーム上で完全な管理者権限を持ちます。 したがって、複数の管理者がいる場合は、built-in組織の下に新しいアカウントを作成することをお勧めします。 または、app-built-inアプリケーションのサインアップチャネルを閉じて、不要なアクセスを防ぐべきです。

注意

Web UIまたはRESTful APIを介して組み込みオブジェクトの名前を変更したり削除したりすることはできません。 Casdoorはこれらの予約名を多くの場所でハードコードしているため、DBを変更してそれらを名前変更したり削除したりしようとすると、システム全体がクラッシュする可能性があります。