Публичный API Casdoor
Веб-интерфейс Casdoor - это SPA (Одностраничное приложение), разработанное на React. React-фронтенд использует RESTful API Casdoor, предоставляемый кодом бэкенда на Go. Этот RESTful API называется Casdoor Public API. Другими словами, с помощью HTTP-запросов вы можете делать все то же самое, что и веб-интерфейс Casdoor. Никаких других ограничений нет. API может быть использован следующими способами:
- Frontend Casdoor
- Клиентские SDK Casdoor (например, casdoor-go-sdk)
- Любой другой код, кастомизированный со стороны приложения
Полная ссылка на Публичный API Casdoor может быть найдена в Swagger: https://door.casdoor.com/swagger. Эта Swagger-документация автоматически генерируется с помощью инструмента Beego Bee. Если вы хотите сгенерировать документацию Swagger самостоятельно, см.: Как сгенерировать файл swagger
API Response Language
Casdoor APIs support internationalized responses. The default response language is English. To receive error messages and other text content in your preferred language, include the Accept-Language header in your API requests:
# Example: Get error messages in French
curl -X GET https://door.casdoor.com/api/get-account \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept-Language: fr"
Supported language codes include en, zh, es, fr, de, ja, ko, and more. For a complete list and more details, see the Internationalization documentation.
Machine-to-Machine (M2M) Authentication
Machine-to-machine (M2M) authentication is designed for scenarios where services, applications, or backend systems need to authenticate and communicate with APIs without user interaction. This is particularly useful for:
- Backend services calling Casdoor APIs programmatically
- CLI tools that need to interact with your APIs using access tokens
- B2B enterprise scenarios where organizations need to generate tokens for API access (e.g., admin tokens for management operations, read tokens for data access)
- Automated processes such as scheduled jobs, data synchronization, or system integrations
- Microservices that need to authenticate with each other
Casdoor supports M2M authentication through the following methods:
Client Credentials Grant (OAuth 2.0): The recommended approach for M2M scenarios. This uses the Client Credentials Grant flow where applications authenticate using their
Client IDandClient Secretto obtain access tokens. See the OAuth Client Credentials Grant documentation for details on obtaining tokens via this flow.Direct API Authentication with Client ID and Secret: Use the application's credentials directly in API calls (see method #2 below).
Use Cases for M2M Authentication
Organization-level API access: In B2B scenarios, you can create a Casdoor application for each organization. The application's client credentials provide admin-level permissions for that organization, enabling them to manage their users, generate tokens, and access organizational resources independently.
Token generation for downstream services: Generate access tokens programmatically (using Client Credentials Grant) that can be distributed to CLI tools, read-only services, or other applications that need scoped access to your APIs.
Service-to-service authentication: Backend services can authenticate as an "application" rather than as a user, with permissions equivalent to the organization admin.
Как аутентифицироваться с помощью Публичного API Casdoor
1. С помощью Токена доступа
Мы можем использовать токен доступа, выданный для аутентифицированного пользователя, чтобы вызвать Публичное API Casdoor от имени самого пользователя.
Как получить токен доступа?
Приложение может получить токен доступа для пользователя Casdoor в конце процесса входа через OAuth (также известного как получение токена по коду и состоянию). Права доступа для вызовов API будут такими же, как у пользователя.
Ниже приведены примеры вызова функции GetOAuthToken() на Go через casdoor-go-sdk.
func (c *ApiController) Signin() {
code := c.Input().Get("code")
state := c.Input().Get("state")
token, err := casdoorsdk.GetOAuthToken(code, state)
if err != nil {
c.ResponseError(err.Error())
return
}
claims, err := casdoorsdk.ParseJwtToken(token.AccessToken)
if err != nil {
c.ResponseError(err.Error())
return
}
if !claims.IsAdmin {
claims.Type = "chat-user"
}
err = c.addInitialChat(&claims.User)
if err != nil {
c.ResponseError(err.Error())
return
}
claims.AccessToken = token.AccessToken
c.SetSessionClaims(claims)
c.ResponseOk(claims)
}
Все выданные токены доступа также можно просмотреть через веб-интерфейс администратором на странице Токены. Например, посетите: https://door.casdoor.com/tokens для демо-сайта.
Как аутентифицироваться?
HTTP
GETпараметр, формат URL:/page?access_token=<The access token>Пример демо-сайта:
https://door.casdoor.com/api/get-global-providers?access_token=eyJhbGciOiJSUzI1NiIsHTTP Bearer токен, формат HTTP заголовка:
Authorization: Bearer <The access token>
2. By Client ID and Client secret (Machine-to-Machine)
This method is the primary approach for machine-to-machine (M2M) authentication. It allows applications, services, or backend systems to authenticate with Casdoor APIs without any user interaction.
Как получить ID клиента и секрет?
Страница редактирования приложения (например, https://door.casdoor.com/applications/casbin/app-vue-python-example) покажет идентификатор клиента и секрет для приложения. This authentication method is useful when you want to call the API as a "machine", "application", or a "service" instead of a user. The permissions for the API calls will be the same as the application (equivalent to the admin of the organization).
Use cases
- Service authentication: Backend services calling Casdoor APIs programmatically
- Organization management: In B2B scenarios, create an application per organization to enable them to manage users and generate tokens independently
- Token generation: Obtain access tokens via the OAuth Client Credentials Grant flow for distribution to CLI tools or other services
Как аутентифицироваться?
HTTP
GETпараметр, формат URL:/page?clientId=<The client ID>&clientSecret=<the client secret>Пример демо-сайта:
https://door.casdoor.com/api/get-global-providers?clientId=294b09fbc17f95daf2fe&clientSecret=dd8982f7046ccba1bbd7851d5c1ece4e52bf039dHTTP Basic Authentication, формат HTTP-заголовка:
Authorization: Basic <The Base64 encoding of client ID and client secret joined by a single colon ":">
Если вы не знакомы с кодировкой Base64, вы можете использовать библиотеку для этого, потому что HTTP Basic Authentication - это популярный стандарт, поддерживаемый во многих местах.
Obtaining access tokens with Client Credentials
For machine-to-machine scenarios where you need to obtain an access token (rather than using client credentials directly), use the OAuth 2.0 Client Credentials Grant flow:
Make a POST request to
https://<CASDOOR_HOST>/api/login/oauth/access_tokenwith:{
"grant_type": "client_credentials",
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET"
}You will receive an access token response:
{
"access_token": "eyJhb...",
"token_type": "Bearer",
"expires_in": 10080,
"scope": "openid"
}Use the
access_tokento call Casdoor APIs (see method #1 above).
For more details, see the Client Credentials Grant documentation.
For B2B Enterprises: You can create separate Casdoor applications for each of your customer organizations. Each application has its own client_id and client_secret, which your customers can use to:
- Authenticate as their organization (with admin privileges)
- Generate access tokens for their users or services
- Manage their organization's users and permissions independently
- Integrate your APIs into their systems without UI-based login flows
This approach allows you to delegate organization management to your customers while maintaining security and isolation between different organizations.
3. С помощью Access key и Access secret
Мы можем использовать ключ доступа и секрет доступа для пользователя Casdoor для вызова Casdoor Public API от имени самого пользователя. Ключ доступа и секрет доступа могут быть настроены на странице настроек пользователя администратором или самим пользователем. API update-user также может быть вызван для обновления этих полей. Права доступа для вызовов API будут такими же, как у пользователя.
Как аутентифицироваться?
Create a pair of accessKey and accessSecret in account setting page.
HTTP
GETпараметр, формат URL:/page?accessKey=<The user's access key>&accessSecret=<the user's access secret>"
Пример демо-сайта: https://door.casdoor.com/api/get-global-providers?accessKey=b86db9dc-6bd7-4997-935c-af480dd2c796/admin&accessSecret=79911517-fc36-4093-b115-65a9741f6b14

curl --location 'http://door.casdoor.com/api/user?accessKey=b86db9dc-6bd7-4997-935c-af480dd2c796&accessSecret=79911517-fc36-4093-b115-65a9741f6b14'
4. С помощью имени пользователя и пароля
Этот метод аутентификации не безопасен и сохранен здесь только для совместимости или демонстрационных целей. Мы рекомендуем использовать три предыдущих метода аутентификации вместо этого.
Что произойдет?
Учетные данные пользователя будут отображаться как параметры GET в URL-адресе запроса. Более того, учетные данные пользователя будут перехвачены в открытом виде сетью, если вы используете HTTP вместо HTTPS.
Мы можем использовать имя пользователя и пароль пользователя Casdoor для вызова Публичного API Casdoor от имени самого пользователя. Имя пользователя имеет формат <Название организации пользователя>/<Имя пользователя>. Разрешения для вызовов API будут такими же, как у пользователя.
Как аутентифицироваться?
HTTP
GETпараметр, формат URL:/page?username=<The user's organization name>/<The user name>&password=<the user's password>"
Пример демо-сайта: https://door.casdoor.com/api/get-global-providers?username=built-in/admin&password=123
CORS (Cross-Origin Resource Sharing)
Casdoor implements flexible CORS handling to allow secure cross-origin API requests. The server validates the Origin header and returns appropriate Access-Control-Allow-Origin headers based on the following rules:
Allowed origins:
- Origins matching your application's redirect URIs (configured in the application settings)
- Origins matching the Casdoor server's own hostname
- The configured origin in Casdoor's settings
- Special endpoint exceptions: requests to
/api/login/oauth/access_tokenand/api/userinfoendpoints, and requests with originappleid.apple.com
How it works:
When you make a cross-origin API request, Casdoor validates the origin through multiple checks: localhost/intranet addresses, matching redirect URIs in any application, matching the server's hostname, or configured origins. If any validation passes, the server includes CORS headers in the response allowing the request. For preflight OPTIONS requests, Casdoor returns appropriate headers including allowed methods (POST, GET, OPTIONS, DELETE) and credentials support.
Configuration:
To enable CORS for your application, add your frontend's origin to the application's Redirect URIs in the Casdoor admin panel. This allows your application to make authenticated API calls from the browser.