客户端形态与权限模型
PandaAuth 的客户端注册包含三个维度:客户端类型(决定是否携带密钥)、 权限声明(决定可用的端点与授权类型)与回调白名单(重定向与登出回调,严格匹配)。
三种客户端形态
| 形态 | 典型场景 | 授权类型 | PKCE | 密钥 |
|---|---|---|---|---|
| 机密 Web 客户端 | 传统服务端渲染 Web 应用 | 授权码 + 刷新令牌 | 推荐 | 有(服务端保管) |
| 公共客户端 | SPA、移动端、桌面端 | 授权码 + 刷新令牌 | 强制 | 无 |
| 服务间(M2M) | 后台服务、守护任务 | 客户端凭证 | 不适用 | 有 |
要点:
- 公共客户端不持有密钥,安全性完全依赖授权码 + PKCE;生产全局要求 PKCE, 公共客户端注册中 PKCE 为必选要求。
- 机密客户端的密钥只应出现在服务端;密钥支持由管理员轮换,轮换后旧密钥立即失效。
- M2M 客户端没有用户上下文,令牌代表客户端本身,scope 由注册的权限声明约束。
权限声明(Permissions)
客户端注册声明它能做什么,未声明的端点与授权类型一律拒绝。声明按组划分:
- 端点:authorize / token / end-session / revocation / introspection;
- 授权类型:authorization_code / client_credentials / refresh_token;
- 响应类型:当前仅开放
code; - Scope:
openid、profile、email、roles、offline_access与自定义业务 scope(形如api)。
回调白名单
redirect_uri 与 post_logout_redirect_uri 按注册白名单严格匹配(绝对地址),
不匹配的请求直接失败。修改白名单由管理通道办理并记录审计。