跳到主内容

公共API

Casdoor 网页 UI 是一个 React单页应用,它与您的代码使用相同的 REST API 进行通信。 该API即Casdoor 公共API:UI 所做的一切均可通过 HTTP 完成。 以下人员使用:

  • Casdoor前端
  • Casdoor SDKs(例如casdoor-go-sdk)
  • 您自己的应用和脚本

API参考: https://door.casdoor.com/swaggerAPI参考: https://door.casdoor.com/swagger

响应语言

响应可本地化。 发送``Accept-Language标头,以获取该语言的错误消息和其他文本:

# 示例:以法语获取错误消息 curl -X GET https://door.casdoor.com/api/get-account \  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \  -H "Accept-Language: fr"

支持的代码包括en, zh, es, fr, de, ja, ko,以及其他。 查看国际化以获取完整列表。

机器对机器(M2M)身份验证

M2M身份验证适用于调用API的服务或脚本无需用户在场。 用途:

  • 以编程方式调用Casdoor的后端服务
  • 使用访问令牌的CLI工具
  • B2B:每个组织都有自己的客户端凭据的应用程序
  • 计划任务、同步和系统集成
  • 服务间身份验证

Casdoor支持通过以下方式实现M2M:

  1. 客户端凭据授权(OAuth 2.0)— 推荐。 使用客户端 ID 和客户端密钥获取访问令牌。
  2. 每次请求中的客户端 ID + 客户端密钥— 直接传递凭据(请参阅下面的方法 #2)。

典型的M2M用例

  • **按组织的 API 访问权限:**每个组织一个应用程序;客户端凭据提供该组织的管理员级访问权限。
  • **下游服务的令牌:**使用客户端凭据获取 CLI 或其他服务的令牌。
  • **服务间通信:**后端以应用程序(相当于组织管理员)的身份调用API。

如何进行身份验证

1. 访问令牌(用户上下文)

使用用户登录后获取的访问令牌(例如,来自OAuth代码交换)。 API调用以该用户的权限运行。

获取令牌

该应用在 OAuth 登录流程结束时接收令牌(代码 + 状态)。 已颁发的令牌在Casdoor UI中也可查看(令牌页面,例如:https://door.casdoor.com/tokens)。

示例(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)
}

发送令牌

  1. 查询参数:

    /page?access_token=<访问令牌>

    演示站点示例:https://door.casdoor.com/api/get-global-providers?access_token=eyJhbGciOiJSUzI1NiIs

  2. Bearer头:

    Authorization: Bearer <访问令牌>

2. 客户端 ID 和客户端密钥 (M2M)

用于机器对机器调用(无需用户)。 权限为应用程序的权限(等同于组织管理员)。

获取凭据

在应用编辑页面上(例如:https://door.casdoor.com/applications/casbin/app-vue-python-example),您将看到客户端 ID和客户端密钥。

使用场景

  • 服务认证:后端服务以编程方式调用Casdoor API
  • 组织管理:在B2B场景中,为每个组织创建一个应用,以便它们能够独立管理用户并生成令牌
  • 组织管理:在B2B场景中,为每个组织创建一个应用,以便它们能够独立管理用户并生成令牌

发送凭据

  1. 查询参数: /page?clientId=<clientId>&clientSecret=<clientSecret>

  2. HTTP基本身份验证— 头部:

    Authorization: Basic <客户端ID和客户端密钥以单个冒号":"连接的Base64编码>

使用任何标准库进行Base64编码clientId:clientSecret

获取访问令牌(客户端凭据流程)

要使用Bearer令牌,而不是在每次请求中发送客户端ID/密钥,请使用客户端凭证授权

  1. https://<CASDOOR_HOST>/api/login/oauth/access_token发送POST请求,携带:

    {
    "grant_type": "client_credentials",
    "client_id": "YOUR_CLIENT_ID",
    "client_secret": "YOUR_CLIENT_SECRET"
    }
  2. 响应中包含访问令牌:

    {
    "access_token": "eyJhb...",
    "token_type": "Bearer",
    "expires_in": 10080,
    "scope": "openid"
    }
  3. 使用access_token作为 Bearer 令牌调用 API(与方法 #1 相同)。

欲了解详细信息,请参阅客户端凭证授权。

信息

适用于B2B:为每个客户组织创建独立的Casdoor应用。 每个应用都有其自身的客户端ID</code>和客户端密钥,您的客户可使用这些信息来:

  • 以他们组织的身份进行身份验证(具备管理员权限)
  • 为他们的用户或服务生成访问令牌
  • 独立管理其组织的用户和权限
  • 将您的API集成到他们的系统中,无需基于UI的登录流程

这种方法可让您将组织管理权限委派给客户,同时保持不同组织之间的安全性和隔离性。

3. 访问密钥和访问密钥对

Casdoor 支持通过访问密钥/访问密钥对进行 API 身份验证。 这些可通过密钥页面进行管理,并可限定于组织、应用程序或用户。 以这种方式认证的请求将使用关联范围的权限运行。

设置

在Casdoor管理侧栏的密钥页面上创建密钥。 选择适当的类型(组织、应用或用户) 并保存。 立即复制生成的访问密钥——它不会再显示。

正在发送

查询参数:

/page?accessKey=<access key>&accessSecret=<access secret>"

示例:https://door.casdoor.com/api/get-global-providers?accessKey=...&accessSecret=...

curl --location ‘http://door.casdoor.com/api/user?accessKey=b86db9dc-6bd7-4997-935c-af480dd2c796&accessSecret=79911517-fc36-4093-b115-65a9741f6b14’

4. 用户名和密码

:::注意**不推荐使用。**凭据作为查询参数发送,可能会被记录或在网络中可见。 仅用于兼容性或本地演示。 优先使用访问令牌、客户端凭据或访问密钥/密钥。 :::

用户名格式:<组织>/<用户名>。 API 调用以该用户身份运行。

查询参数:

/page?username=<The user's organization name>/<The user name>&password=<the user's password>"

SSO 登出

/api/sso-logout端点会根据logoutAll.。

端点

GET or POST /api/sso-logout?logoutAll=<true|false>

参数

  • logoutAll(可选):true, 1或省略 → 从所有会话中注销,并使所有令牌失效。 false0→ 仅限当前会话。

行为

完整单点登录登出(默认):

  • 删除用户在所有应用中的所有活动会话
  • 使该用户所颁发的所有访问令牌失效
  • 发送包含所有会话ID和令牌哈希的注销通知

仅限会话的注销:

  • 仅删除当前会话
  • 保留其他活动会话和令牌
  • 仅发送包含当前会话ID的注销通知

当用户应从一台设备注销,但在其他地方保持登录状态时,使用仅限会话的注销功能。

身份验证

用户必须经过身份验证。 使用上述任意一种身份验证方法

示例请求

# Full SSO logout (all sessions)
curl -X POST https://door.casdoor.com/api/sso-logout \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"

# Session-level logout (current session only)
curl -X POST "https://door.casdoor.com/api/sso-logout?logoutAll=false" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"

# Using session cookie
curl -X POST https://door.casdoor.com/api/sso-logout \
--cookie "casdoor_session_id=abc123def456"

响应

{
"status": "ok",
"msg": "",
"data": ""
}

CORS

Casdoor 设置了 CORS 头,以便浏览器能够从您的前端调用 API。 允许的来源包括:

  • 您的应用程序的重定向URI
  • Casdoor服务器主机名
  • Casdoor设置中配置的源
  • 特殊情况:/api/login/oauth/access_token</code>, /api/userinfo和来源``appleid.apple.com

服务器会根据这些内容检查请求的Origin</code>;如果匹配,则添加相应的Access-Control-Allow-*标头。 对于OPTIONS预检,允许的方法包括GET, POST, OPTIONS, DELETE,且支持凭据。

要允许您的应用:在Casdoor管理员中,将您的前端源添加到应用程序的重定向URI中。