ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

如何用脚本测试 Budibase 的 SCIM 用户与组配置(Provisioning)接口

2026/9/13 9:49:15 拓冰建站 浏览量
如何用脚本测试 Budibase 的 SCIM 用户与组配置(Provisioning)接口 如何用脚本测试 Budibase 的 SCIM 用户与组配置Provisioning接口【免费下载链接】budibaseAI agents, automations and apps that run your operations. Model agnostic.项目地址: https://gitcode.com/GitHub_Trending/bu/budibase在把身份提供方IdP接入 Budibase 的 SCIM Provisioning 之前你需要先确认两件事Provisioning 地址和 Token 是否可用以及用户User和组Group的创建、成员关联是否能正常落地。Budibase 仓库自带的scripts/dev/testScim.sh就是干这个的它通过 Docker 容器调用/api/global/scim/v2接口创建一条 SCIM 用户、一条 SCIM 组并把用户加入该组最后打印出资源 ID。配套的scripts/dev/testScimNuke.sh则用于清理这些测试产物。前置条件跑测试脚本前需要满足以下条件均来自仓库内的实现与脚本要求Docker两个脚本都以docker run方式在alpine:3.20容器内执行 curl/jq 请求。Budibase 实例正在运行且可访问脚本默认的SCIM_URL是http://host.docker.internal:10000/api/global/scim/v2即宿主机上的 10000 端口。如果你的实例在别处例如 https 域名或别的端口用环境变量SCIM_URL覆盖。SCIM 功能已启用在 Builder 中进入 Settings Auth SCIM打开 Activated 开关并保存。该页面同时显示两项关键信息Provisioning URL${platformUrl}/api/global/scim/v2Provisioning Token即脚本需要的SCIM_TOKEN页面对应的实现见 SCIM 设置页。许可证包含相应特性服务端路由scim.ts要求 SCIM 功能开启且组相关端点POST/GET/PATCH/DELETE/groups额外受Feature.USER_GROUPS特性保护接口还要求管理员auth.adminOnly。特性缺失时的表现见文末“排查”。获取 Token 与配置环境变量SCIM_TOKEN取自 Settings Auth SCIM 页面中的 Provisioning Token。两个脚本对它的查找逻辑一致见 testScim.sh 开头如果已导出环境变量SCIM_TOKEN直接使用否则从仓库根目录的.env文件中读取SCIM_TOKEN...这一行自动剥掉首尾引号两者都没有时报错退出SCIM_TOKEN is required. Copy the provisioning token from Settings Auth SCIM.因此有两种方式提供 Token# 方式一直接导出环境变量 export SCIM_TOKEN你的ProvisioningToken # 方式二写入仓库根目录的 .env 文件 SCIM_TOKEN你的ProvisioningToken如果 Budibase 不是跑在宿主机 10000 端口再额外设置export SCIM_URLhttps://your-budibase-domain/api/global/scim/v2运行测试脚本创建用户与组并验证在仓库根目录执行bash scripts/dev/testScim.sh脚本会启动一个一次性容器docker run -i --rm带--add-hosthost.docker.internal:host-gateway容器内安装 curl 和 jq依次执行三个 SCIM 请求POST/users创建一个用户externalId为local-user-时间戳userName为local.user.时间戳example.com并带上 enterprise User 扩展 schemaPOST/groups创建一个组externalId为local-group-时间戳displayName为Local Azure Test Group 时间戳schema 中同时包含 core Group 和 Microsoft AD SCIM Group 扩展PATCH/groups/group_id通过PatchOp的add操作把上一步创建的用户加入组的members。成功时的输出后缀为脚本生成的秒级时间戳每次运行不同Created SCIM user: user_id Created SCIM group: group_id Group display name: Local Azure Test Group 1757635200user_id/group_id是接口返回的资源 ID不是固定值。脚本使用set -euo pipefail且每个 curl 都带-fsS任何一步请求失败非 2xx 或网络错误都会直接中断退出因此只要看到上面两行Created输出说明用户创建、组创建、成员关联三步都通过了。还可以做一次人工复核用同一个 Token 调列表接口确认资源已持久化curl -s -H Authorization: Bearer ${SCIM_TOKEN} \ http://host.docker.internal:10000/api/global/scim/v2/users返回体是 SCIM 标准 ListResponse含Resources、totalResults、itemsPerPage等字段参考 types 定义。列表默认每页 20 条可以用?startIndex翻页也可以按userName eq ...、externalId eq ...这类 filter 精确查找刚创建的测试用户行为见 scim.spec.ts。组列表同理支持displayName eq ...过滤和excludedAttributesmembers排除成员字段。清理测试数据可选测试会在实例里留下真实的 SCIM 用户和组。如果需要清理使用配套的 testScimNuke.shbash scripts/dev/testScimNuke.sh注意副作用这个脚本不是只删刚才创建的测试数据而是删除全部SCIM-provisioned 资源——它先列出/groups下的所有 SCIM 组逐一 DELETE再列出/users全局用户接口下所有scimInfo.isSync true的用户逐一 DELETE。如果你的实例里已有 IdP 同步过来的正式用户运行前务必确认这些数据可以被删除否则不要执行。Token 的提供方式与测试脚本相同。执行过程中脚本会打印Found N SCIM groups、Deleted SCIM group: id之类的进度全部删除成功时退出码为 0有失败则退出码为 1 并在 stderr 打印Failed to delete ...。另一种不依赖脚本的清理方式在 Settings Auth SCIM 页面关闭 Activated 开关Budibase 会要求你选择处理方式——“Remove SCIM users”永久删除所有 SCIM 用户或“Convert to regular users”保留用户但不再与 IdP 同步。排查请求失败时对照这些返回结合服务端实现与 接口测试几个典型失败现象和判断依据现象原因依据仓库实现HTTP 400error: { code: feature_disabled, featureName: scim }message: Feature disabled: scim许可证未包含 SCIM 特性或 Settings Auth SCIM 中未启用。先确认开关已打开并保存HTTP 403Tenant id not set请求未携带有效 TokenToken 即用于识别租户与管理员身份HTTP 403管理员校验失败Token 对应的不是管理员身份。SCIM 路由挂了auth.adminOnlyProvisioning Token 需来自管理员配置HTTP 409创建的用户/组与已存在的 SCIM 资源冲突相同 externalId 重复同步时会出现。换一个不同的externalId重跑组相关端点报特性未启用组的创建/更新受Feature.USER_GROUPS额外保护用户端点正常但组端点失败时检查许可证另外两点接口行为值得在测试中留意来自接口测试用例对active发Replace操作置为false值可以是false、false、False会直接删除该用户后续 GET 返回 404删除账号持有者account holder会返回 400Account holder cannot be deleted。下一步脚本验证通过后就可以把 Settings Auth SCIM 页面显示的 Provisioning URL 与 Provisioning Token 配置到你的身份提供方由 IdP 侧发起真实的用户与组同步如果组端点因许可证受限不可用先确认USER_GROUPS特性已包含在许可证中再执行 IdP 侧的组同步配置。【免费下载链接】budibaseAI agents, automations and apps that run your operations. Model agnostic.项目地址: https://gitcode.com/GitHub_Trending/bu/budibase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考