Перейти к основному содержанию

Публичный 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:

  1. 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 ID and Client Secret to obtain access tokens. See the OAuth Client Credentials Grant documentation for details on obtaining tokens via this flow.

  2. 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 для демо-сайта.

Как аутентифицироваться?

  1. HTTP GET параметр, формат URL:

    /page?access_token=<The access token>

    Пример демо-сайта: https://door.casdoor.com/api/get-global-providers?access_token=eyJhbGciOiJSUzI1NiIs

  2. HTTP 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

Как аутентифицироваться?

  1. HTTP GET параметр, формат URL:

    /page?clientId=<The client ID>&clientSecret=<the client secret>

    Пример демо-сайта: https://door.casdoor.com/api/get-global-providers?clientId=294b09fbc17f95daf2fe&clientSecret=dd8982f7046ccba1bbd7851d5c1ece4e52bf039d

  2. HTTP 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:

  1. Make a POST request to https://<CASDOOR_HOST>/api/login/oauth/access_token with:

    {
    "grant_type": "client_credentials",
    "client_id": "YOUR_CLIENT_ID",
    "client_secret": "YOUR_CLIENT_SECRET"
    }
  2. You will receive an access token response:

    {
    "access_token": "eyJhb...",
    "token_type": "Bearer",
    "expires_in": 10080,
    "scope": "openid"
    }
  3. Use the access_token to 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 будут такими же, как у пользователя.

Как аутентифицироваться?

  1. Create a pair of accessKey and accessSecret in account setting page.

  2. 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

User Api Key

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 будут такими же, как у пользователя.

Как аутентифицироваться?

  1. 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_token and /api/userinfo endpoints, and requests with origin appleid.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.