跳到主内容

Webhooks

Casdoor 可以通过发送 HTTP``POST请求,并附带 JSON 负载到您配置的 URL,来在事件发生时通知您的应用程序。 使用webhook对注册、登录、登出、个人资料更新以及许多其他事件作出响应。

Webhooks的工作原理

当Casdoor中发生事件时:

  1. Casdoor会向指定的webhook URL发送``POST请求。
  2. 请求包含带有事件详情的JSON有效载荷。
  3. 您的应用程序会处理该有效载荷,并根据事件类型执行相关操作。

支持的事件

Webhook可订阅一系列按领域分组的事件:

身份验证&会话事件

  • 注册</code>, 登录, ``注销- 用户身份验证流程
  • sso-logout, unlink- 单点登录与账户解除绑定
  • new-user- 新用户创建的自定义事件

资源管理事件

标准 CRUD 操作(添加-、更新-、删除-*) 适用于所有核心资源,包括组织、组、用户、应用程序、提供商和证书。 角色、权限、模型、适配器、强制器、会话、令牌、产品、支付和定价等其他资源也支持这些操作。 Webhook 还可跟踪同步器、表单、邀请、LDAP 配置、订单、工单和交易的更改。

专业运营

用户管理: 添加用户密钥, 从组中移除用户, 上传用户, 检查用户密码, 设置密码, 重置邮箱或电话, 验证身份

批量操作: 上传组, 上传角色, 上传权限, 上传资源

订单处理: 下单, 取消订单, 支付订单

付款处理: 发票付款, 通知付款

邀请: 发送邀请, 验证邀请

支持系统: 添加工单消息

同步: run-syncer, test-syncer-db, sync-ldap-users

访问控制: 强制执行, 批量强制执行, 添加策略, 更新策略, 删除策略, 添加记录

多因素身份验证: 删除多因素身份验证, 设置首选多因素身份验证, 多因素身份验证/设置/初始化, 多因素身份验证/设置/验证, 多因素身份验证/设置/启用

WebAuthn: webauthn/注册/开始, webauthn/注册/完成, webauthn/登录/开始, webauthn/登录/完成

OAuth&令牌管理: login/oauth/access_token, login/oauth/refresh_token, login/oauth/introspect

验证&通信: 发送验证码, 验证验证码, 验证验证码, 发送电子邮件, 发送短信, 发送通知

SAML: acs, saml/metadata

系统操作: 运行casbin命令, 刷新引擎, 健康, 指标, 回调, 设备认证, 人脸识别登录开始, 用户, 用户信息

每个事件都在 webhook 负载中包含上下文信息,使您能够根据触发 webhook 的具体操作实施自定义逻辑。

设置Webhook

  1. 在您的Casdoor实例中,前往设置Webhook.
  2. 单击添加Webhook.
  3. 输入Webhook URL以接收事件。
  4. 选择一个或多个要订阅的事件。
  5. (可选)添加自定义标头(例如用于身份验证)。
  6. 保存。 Casdoor将从此处开始向该URL发送事件。

筛选 Webhook 负载

在使用webhook时,您并不总是需要完整的记录数据。 Casdoor允许您通过配置对象字段来过滤有效负载,以适用于每个webhook。 当您有隐私顾虑、带宽受限,或您的端点仅处理特定字段时,此功能尤为宝贵。

ObjectFields 配置可接受“全部”以接收完整记录,也可接受您希望包含的特定字段名称列表。 当您指定字段名称时,Casdoor仅会在webhook有效载荷中发送这些字段,从而减小有效载荷大小,并且仅公开您的应用程序所需的数据。

如果您配置了多个具有不同ObjectField设置的webhook,每个webhook将独立运行。 例如,一个webhook可能仅接收用户ID和时间戳,而另一个则接收完整的用户资料。 Casdoor 确保应用于某个 Webhook 的过滤不会影响发送给其他 Webhook 的数据,即使这些 Webhook 是由同一事件触发的。

示例有效负载

登录时发送到您的 webhook 的示例 JSON:

{
"event": "login",
"timestamp": 1709452800,
"user": {
"id": "12345",
"username": "johndoe",
"email": "johndoe@example.com"
}
}

您的应用程序应解析此有效载荷并执行必要操作,例如记录事件或通知其他服务。

测试Webhook

在投入生产前,请使用以下内容进行测试:

  • Beeceptor——允许您创建自定义Webhook URL并检查传入请求。
  • Webhook.site——提供一个用于测试的即时Webhook端点。

使用Beeceptor的示例

  1. Beeceptor.
  2. 复制该URL,并将其设置为Casdoor中的Webhook URL。
  3. 触发一个事件(例如,登录Casdoor)。
  4. 在Beeceptor的仪表板中检查请求。

在您的应用程序中处理Webhook

您的服务器应能够处理传入的Webhook请求。 以下是Node.js中的简单示例:

const express = require('express');
const app = express();

app.use(express.json());

app.post('/webhook', (req, res) => {
console.log('Received webhook:', req.body);
res.status(200).send('Webhook received');
});

app.listen(3000, () => console.log('Server running on port 3000'));

在生产环境中使用webhook之前,请先使用Beeceptor或Webhook.site验证传入的webhook请求(例如签名或共享密钥)并进行测试

配送跟踪与重试

Casdoor 会将每次 Webhook 投递尝试都作为Webhook 事件记录。 在侧栏中导航至Webhook 事件,以查看您组织中所有 Webhook 的交付历史。

每条事件记录包含:

字段描述
状态待处理, 成功, 失败,或重试中
尝试次数已进行的配送尝试次数
上次状态码最近一次尝试的HTTP响应码
上次响应/错误最近一次尝试的响应体或错误信息
下次重试时间下次自动重试的时间(如适用)

自动重试

失败的投递会由每30秒运行一次的后台工作程序自动重试。 每个事件的默认最大重试次数为3。 所有重试均耗尽后,事件状态将被设置为失败且不会自动进行后续尝试。

手动重放

要重新发送事件,请在Webhook 事件列表中打开它,然后单击重播. This creates a new delivery attempt regardless of the current retry count or status. 这将创建一个新的投递尝试,而不管当前的重试次数或状态。 用于在临时端点中断后恢复,或在修复处理程序中的错误后重新处理事件。