Pular para o conteúdo principal

Conceitos Principais

Como administrador do Casdoor, você deve estar familiarizado com pelo menos quatro conceitos principais: Organização, Usuário, Aplicativo e Fornecedor.

dica

Nas partes seguintes, usaremos o site de demonstração https://door.casdoor.com como exemplo.

Organização

No Casdoor, uma organização é um contêiner para usuários e aplicativos. Por exemplo, todos os funcionários de uma empresa ou todos os clientes de um negócio podem ser abstraídos como uma organização. A definição da classe Organização é mostrada abaixo:

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

Usuário

No Casdoor, um usuário pode fazer login em um aplicativo. Cada usuário pode pertencer a apenas uma organização, mas pode fazer login em vários aplicativos pertencentes à organização. Atualmente, existem dois tipos de usuários no Casdoor:

  • usuários da organização built-in, como built-in/admin: administradores globais que têm poder administrativo total na plataforma Casdoor.
  • Usuários de outras organizações, como my-company/alice: usuários normais que podem se inscrever, fazer login, sair, alterar seu próprio perfil, etc.

Na API do Casdoor, um usuário é tipicamente identificado como <organization_name>/<username>. Por exemplo, o administrador padrão do Casdoor é denotado como built-in/admin. Além disso, a definição da classe Usuário inclui uma propriedade id, que é um UUID como d835a48f-2e88-4c1f-b907-60ac6b6c1b40 e pode ser escolhido como ID de um usuário por um aplicativo.

dica

Para aplicativos que são apenas para uma organização, é possível usar <username> em vez de <organization_name>/<username> como o ID do usuário em todo o aplicativo para simplicidade.

Aqui está a definição da classe Usuário:

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

Aplicativo

Um aplicativo representa um serviço web que precisa ser protegido pelo Casdoor, como um site de fórum, um sistema OA ou um sistema 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"`
}

Cada aplicativo pode ter sua própria página de inscrição personalizada, página de login e mais. A página de login raiz /login (por exemplo, https://door.casdoor.com/login) é a página de login apenas para o aplicativo interno do Casdoor: app-built-in.

Um aplicativo é um "portal" ou "interface" para um usuário fazer login no Casdoor. Um usuário deve passar pela página de login de um aplicativo para fazer login no Casdoor.

AplicativoURL da página de inscriçãoURL da página de login
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 Login

É muito fácil fazer login no Casdoor através do aplicativo interno do Casdoor; basta visitar a página inicial do servidor Casdoor (por exemplo, https://door.casdoor.com para o site de demonstração) e ele redirecionará automaticamente para /login. Mas como você obtém as URLs para outros aplicativos no código frontend e backend? Você pode concatenar strings manualmente ou chamar algumas funções utilitárias fornecidas pelos SDKs do Casdoor para obter as URLs:

1. Concatenando strings manualmente

  • URL da página de inscrição
    • Inscrição para o aplicativo especificado: <your-casdoor-hostname>/signup/<your-application-name>
    • Inscrição por 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
    • Inscrição automática: <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 da página de login
    • Login para a organização especificada: <your-casdoor-hostname>/login/<your-organization-name>
    • Login por 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. Usando SDK frontend (para código JavaScript frontend usando React, Vue ou Angular)

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

3. Usando SDK backend (para código backend usando Go, Java, etc.)

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

Fornecedor

Casdoor é um sistema de login único federado que suporta vários provedores de identidade via OIDC, OAuth e SAML. Casdoor também pode enviar códigos de verificação ou outras notificações para usuários via e-mail ou SMS. Casdoor usa o conceito de Fornecedor para gerenciar todos esses conectores de terceiros.

Uma lista de todos os fornecedores suportados pelo Casdoor pode ser encontrada em fornecedor/visão geral.

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

Como o Casdoor gerencia a si mesmo?

Ao executar o Casdoor pela primeira vez, alguns objetos internos são criados para facilitar sua gestão:

  • Uma organização interna chamada built-in.
  • Um usuário chamado admin na organização built-in.
  • Um aplicativo interno chamado app-built-in, administrado pela organização built-in, representando o próprio Casdoor.

Todos os usuários sob a organização built-in, incluindo admin, terão privilégios de administrador total na plataforma Casdoor. Portanto, se houver vários administradores, é aconselhável criar novas contas sob a organização built-in. Alternativamente, o canal de inscrição para o aplicativo app-built-in deve ser fechado para evitar acessos indesejados.

cuidado

Não é possível renomear ou excluir os objetos internos tanto pela interface de usuário web quanto pela API RESTful. Casdoor tem esses nomes reservados codificados em muitos lugares; tentar renomeá-los ou excluí-los modificando o DB pode causar a falha de todo o sistema.