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

Публичный 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 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. С помощью ID клиента и Секрета клиента

Как получить ID клиента и секрет?

Страница редактирования приложения (например, https://door.casdoor.com/applications/casbin/app-vue-python-example) покажет идентификатор клиента и секрет для приложения. Эта аутентификация полезна, когда вы хотите вызвать API как "машина", "приложение" или "сервис", а не как пользователь. Разрешения для вызовов API будут такими же, как у приложения (то есть у администратора организации).

Ниже приведены примеры того, как вызвать функцию GetOAuthToken() в Go через casdoor-go-sdk.

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

  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 - это популярный стандарт, поддерживаемый во многих местах.

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