Scope 权限
CaelLabID 使用 Scope 控制应用可以访问的用户信息范围。
可用 Scope
| Scope | 说明 | 返回字段 | 风险 | 状态 |
|---|---|---|---|---|
openid | 基本用户标识(必需) | sub, id | 低 | ✅ 可用 |
profile | 用户名、昵称、头像 | username, display_name, avatar | 低 | ✅ 可用 |
email | 已验证邮箱 | email, email_verified | 中 | ✅ 可用 |
使用方式
在授权请求中通过 scope 参数指定。多个 scope 用空格分隔:
scope=openid profile email
也支持逗号分隔:
scope=openid,profile,email
如果只请求 profile 或 email 而省略 openid,系统会自动补上。
Scope 降级
如果请求的 Scope 包含无效值,系统会自动过滤:
请求: scope=openid profile something_invalid
实际: scope=openid profile(something_invalid 被过滤)
如果全部无效,自动降级为 openid。
已授权免确认
当用户之前已授权过,且当前请求的 scope 是已授权 scope 的子集时,系统会自动发放授权码,不再弹出授权页面。
示例:
| 已授权 scope | 请求 scope | 结果 |
|---|---|---|
openid profile | openid | 免确认 |
openid profile | openid profile | 免确认 |
openid | openid profile | 需确认(scope 升级) |
openid profile | openid profile email | 需确认(scope 升级) |
隐私保护:应用级 subject_id
CaelLabID 为每个「用户 + 应用」组合生成独立的 subject_id:
用户 yunyun 在论坛应用: sub = abc123...
用户 yunyun 在编程社区: sub = def456...
这是自动的,无需应用额外处理。sub 存储在 user_app_subjects 表中,首次授权时生成,后续复用。
安全建议
- 只申请你需要的 Scope,遵循最小权限原则
openid是必需的,无法省略profile属于低危权限,包含用户名、昵称和头像email属于中危权限,授权页面会用黄色高亮提示,用户必须手动勾选才能授予