แนวคิดหลัก
ในฐานะผู้ดูแลระบบ Casdoor, คุณควรคุ้นเคยกับแนวคิดหลักอย่างน้อยสี่ประการ: Organization
, User
, Application
, และ Provider
.
ในส่วนต่อไปนี้, เราจะใช้เว็บไซต์ตัวอย่าง 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:
- ผู้ใช้ขององค์กร
built-in
, เช่นbuilt-in/admin
: ผู้ดูแลระบบทั่วโลกที่มีอำนาจการจัดการเต็มรูปแบบบนแพลตฟอร์ม Casdoor. - ผู้ใช้ขององค์กรอื่นๆ, เช่น
my-company/alice
: ผู้ใช้ทั่วไปที่สามารถสมัครสมาชิก, เข้าสู่ระบบ, ออกจากระบบ, เปลี่ยนโปรไฟล์ของตนเอง ฯลฯ.
ใน API ของ Casdoor, ผู้ใช้มักจะถูกระบุเป็น <organization_name>/<username>
. ตัวอย่างเช่น, ผู้ดูแลระบบเริ่มต้นของ Casdoor ถูกเรียกว่า built-in/admin
. นอกจากนี้, คำนิยามคลาส User
รวมถึงคุณสมบัติ id
, ซึ่งเป็น UUID เช่น d835a48f-2e88-4c1f-b907-60ac6b6c1b40
และสามารถเลือกเป็น ID ของผู้ใช้โดยแอปพลิเคชัน.
สำหรับแอปพลิเคชันที่เป็นขององค์กรเพียงองค์กรเดียว, มันเป็นไปได้ที่จะใช้ <username>
แทน <organization_name>/<username>
เป็น ID ของผู้ใช้ในแอปพลิเคชันเพื่อความง่ายดาย.
นี่คือคำนิยามคลาส 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"`
}
แอปพลิเคชัน
แอปพลิเคชันแอปพลิเคชัน แทนบริการเว็บที่ต้องการการป้องกันโดย Casdoor, เช่น เว็บไซต์ฟอรัม, ระบบ OA, หรือระบบ 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"`
}
แต่ละแอปพลิเคชันสามารถมีหน้าสมัครสมาชิก, หน้าเข้าสู่ระบบ, และอื่นๆ ที่ปรับแต่งได้เอง. หน้าเข้าสู่ระบบหลัก /login
(เช่น, https://door.casdoor.com/login) เป็นหน้าเข้าสู่ระบบเฉพาะสำหรับแอปพลิเคชันที่มีตั้งแต่แรกของ Casdoor: app-built-in
.
แอปพลิเคชันคือ 'ประตู' หรือ 'อินเทอร์เฟซ' สำหรับผู้ใช้เพื่อเข้าสู่ระบบ Casdoor. ผู้ใช้ต้องผ่านหน้าเข้าสู่ระบบของแอปพลิเคชันหนึ่งเพื่อเข้าสู่ระบบ Casdoor.
URL สำหรับเข้าสู่ระบบ
มันง่ายมากที่จะเข้าสู่ระบบ Casdoor ผ่านแอปพลิเคชันที่มีตั้งแต่แรกของ Casdoor; เพียงแค่เยี่ยมชมหน้าแรกของเซิร์ฟเวอร์ Casdoor (เช่น, https://door.casdoor.com สำหรับเว็บไซต์ตัวอย่าง) และมันจะเปลี่ยนเส้นทางคุณไปยัง /login
โดยอัตโนมัติ. แต่คุณจะได้รับ URL สำหรับแอปพลิเคชันอื่นๆ ในโค้ดฝั่งหน้าบ้านและฝั่งหลังบ้านได้อย่างไร? คุณสามารถเชื่อมต่อสตริงด้วยตนเองหรือเรียกใช้ฟังก์ชันยูทิลิตี้บางอย่างที่ Casdoor SDKs ให้มาเพื่อรับ 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 ฝั่งหน้าบ้าน (สำหรับโค้ด JavaScript ฝั่งหน้าบ้านที่ใช้ React, Vue, หรือ Angular)
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
. - ผู้ใช้ที่ชื่อ
admin
ในองค์กรbuilt-in
. - แอปพลิเคชันที่มีตั้งแต่แรกชื่อ
app-built-in
, ซึ่งดูแลโดยองค์กรbuilt-in
, แทน Casdoor เอง.
ผู้ใช้ทุกคนภายใต้องค์กร built-in
, รวมถึง admin
, จะมีสิทธิ์ผู้ดูแลระบบเต็มรูปแบบบนแพลตฟอร์ม Casdoor. ดังนั้น, หากมีผู้ดูแลระบบหลายคน, จึงแนะนำให้สร้างบัญชีใหม่ภายใต้องค์กร built-in
. หรืออีกทางเลือกหนึ่งคือปิดช่องทางสมัครสมาชิกสำหรับแอปพลิเคชัน app-built-in
เพื่อป้องกันการเข้าถึงที่ไม่ต้องการ.
ไม่สามารถเปลี่ยนชื่อหรือลบวัตถุที่มีตั้งแต่แรกผ่านทางเว็บ UI หรือ API แบบ RESTful. Casdoor ได้เขียนชื่อที่สงวนไว้เหล่านี้ไว้ในหลายๆ ที่; การพยายามเปลี่ยนชื่อหรือลบพวกมันโดยการแก้ไขฐานข้อมูลอาจทำให้ระบบทั้งหมดล่ม.