Skip to content

This document was written by AI and has been manually reviewed.

应用访问白名单

一些下游应用(如 frp、自托管工具)本身不支持基于 JWT claims 的访问控制 —— 它们无法读取 in_team_*role_in_team_* 声明并自行强制执行成员资格检查。 应用访问白名单 功能让 Prism 在用户到达应用之前就进行拦截检查。

启用后,OAuth 授权流程会对用户进行规则匹配检查。未匹配到任何规则的用户将被 重定向到"访问被拒绝"页面,而不是看到授权确认界面。

工作原理

  • 应用所有者在应用设置中开启白名单开关
  • 添加规则,指定哪些团队用户可以进行授权
  • 团队规则可以设置最低角色要求(所有者、共同所有者、管理员或成员)
  • 多条规则之间是或逻辑关系 —— 匹配任意一条即可通过
  • 如果开启了开关但没有配置任何规则,任何人都无法访问该应用

配置白名单

1. 在仪表盘中打开应用

导航到 我的应用 → 选择应用 → 点击 访问白名单 标签页。

2. 开启白名单

启用访问白名单 切换为开启状态。

3. 添加规则

点击 添加规则 并选择:

字段说明
规则类型团队 — 团队中所有成员均可访问。用户 — 单个用户可访问。
目标从下拉菜单中选择团队,或输入用户 ID。
最低角色(仅限团队)成员必须拥有的最低角色。可选:所有者、共同所有者、管理员、成员。

您可以添加任意数量的规则。用户只需匹配其中一条即可通过白名单检查。

4. 删除规则

每条规则行都有一个删除按钮,删除后立即生效。


认证流程中的检查

检查在 GET /api/oauth/app-info 中执行 —— 用户已认证但尚未看到授权确认 页面。如果用户不匹配,API 返回 403 和:

json
{
  "error": "unauthorized_whitelist",
  "app_name": "您的应用名称"
}

前端捕获此错误并重定向到 /unauthorized?app_name=..., 用户会看到应用名称和一个"返回"按钮。


API 管理

白名单规则也可以通过 API 管理(需要对应用的写权限):

列出规则

bash
curl https://your-prism.example/api/apps/<app_id>/access-rules \
  -H "Authorization: Bearer <token>"

响应:

json
{
  "rules": [
    {
      "id": "rul_abc123",
      "app_id": "app_xyz789",
      "rule_type": "team",
      "target_id": "team_456",
      "min_role": "admin",
      "created_at": 1711200000
    },
    {
      "id": "rul_def456",
      "app_id": "app_xyz789",
      "rule_type": "user",
      "target_id": "usr_abc",
      "min_role": null,
      "created_at": 1711200100
    }
  ]
}

添加规则

bash
curl -X POST https://your-prism.example/api/apps/<app_id>/access-rules \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "rule_type": "team",
    "target_id": "team_456",
    "min_role": "admin"
  }'

删除规则

bash
curl -X DELETE https://your-prism.example/api/apps/<app_id>/access-rules/<rule_id> \
  -H "Authorization: Bearer <token>"

限制

  • 没有公开的用户列表 API。 创建用户规则时需要知道用户的 ID。 带有下拉选择的团队规则是主要的工作流程。
  • 白名单在授权阶段进行检查。将用户从团队中移除会立即阻止后续登录, 但不会使该应用的已有访问令牌失效 —— 如有需要,应用所有者应另外撤销令牌。
  • 子团队继承得到支持:如果团队规则允许访问且用户是某个子团队的成员, 他们将通过有效成员资格检查。

在 GPL-3.0 许可协议下发布.