客户端形态与权限模型

机密 Web、公共 SPA 与服务间调用三种形态的差异与权限声明。

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 按注册白名单严格匹配(绝对地址), 不匹配的请求直接失败。修改白名单由管理通道办理并记录审计。

下一步