第三方 OAuth 接入
第三方 OAuth 接入
用 MuoCeon 账号登录你的应用:从申请客户端到拿到第一枚令牌。
本篇章面向外部开发者:你有一个自己的应用(Web 站点、桌面程序、移动 App 或服务端服务),希望用户用 MuoCeon 账号登录,并在用户同意后读取其身份信息。
MuoCeon 的授权服务器实现的是标准 OAuth 2.0 授权码流程 + PKCE,并在此之上提供 OIDC 身份令牌、令牌撤销与内省、标准元数据发现。没有私有协议,也没有自定义签名算法:任何成熟的 OAuth 2.0 / OIDC 客户端库都能直接接入。
三段式结构
接入链路由三个角色组成,先认清它们分别负责什么,后面的文档才不会读串。
| 角色 | 地址形态 | 你与它的关系 |
|---|---|---|
| 开发者平台 | 申请入口 | 在这里登记应用,拿到 client_id(机密客户端另发 client_secret) |
| 授权服务器 | {issuer},形如 https://id.example.com/v1/oauth | 换令牌、刷新、撤销、内省、JWKS、元数据 |
| 同意页 | {consentUiUrl}/authorize | 用户在这里登录并确认授权,是浏览器跳转的落点 |
开发者平台目前尚未上线。需要创建客户端时,按 申请客户端与登记回调 中的清单提交资料,由运营侧代为登记;登记完成后你会拿到 client_id 与回调地址的生效状态。
你会用到的能力
| 能力 | 面向第三方 | 说明 |
|---|---|---|
| 授权码 + PKCE | ✅ | 第三方唯一的取令牌方式,强制 S256 |
| 刷新令牌 | ✅ | 请求 offline_access 才签发,刷新即轮换 |
| 令牌撤销 / 内省 | ✅ | RFC 7009 / RFC 7662 |
OIDC id_token / UserInfo | ✅ | 请求 openid 后签发,身份信息走 UserInfo |
| 元数据发现 | ✅ | RFC 8414 / RFC 9728 / OIDC Discovery |
认证强度提升(ACR / max_age) | ✅ | 可要求用户完成更强的认证 |
| 授权详情(RFC 9396) | ⚠️ 仅第一方 | 用于账号自管理能力,第三方不适用 |
| 令牌交换(RFC 8693) | ⚠️ 仅第一方 | 管理端换取 oauth / account 受众令牌 |
| 隐式流程 / 密码模式 / 客户端凭据(第三方) | ❌ | 不支持,也不建议使用 |
章节地图
接入准备
申请客户端、登记回调、发现元数据、跑通最小流程
授权流程
授权码 + PKCE 全流程、换令牌与刷新、令牌交换
权限与安全
scope 与受众、回调地址策略、提权、细粒度授权
参考
端点总表、令牌结构、错误码
一次授权长什么样
用户浏览器 同意页 (id) 授权服务器 (server)
│ │ │
│ 1. 跳转 /authorize │ │
├────────────────────>│ │
│ │ 2. 登录态检查 + 预校验 │
│ ├─────────────────────────>│
│ │ 3. 渲染应用名与权限清单 │
│ 4. 用户点击「同意」 │ │
│ │ 5. 提交授权决策 │
│ ├─────────────────────────>│
│ 6. 302 回 redirect_uri │
│<────────────────────── code + state + iss ──────┤
你的后端 │ │
├── 7. POST /token(带 code_verifier)──────────>│
│<──────────── access_token / refresh_token ─────┤第 2 步到第 5 步全部发生在 MuoCeon 的页面里,你不需要、也不能自己实现它们;你能控制的只有第 1 步的跳转参数和第 7 步的换令牌请求。细节见 授权码流程。
术语速查
| 术语 | 含义 |
|---|---|
issuer | 授权服务器标识,令牌里的 iss 与元数据里的 issuer 必须一致 |
client_id | 你登记的客户端标识,公开信息,可以出现在浏览器地址里 |
client_secret | 机密客户端的密钥,只能存在于你的服务端 |
redirect_uri | 登记过的回调地址,换令牌时还要再带一次 |
scope | 申请的权限清单,格式为 <资源受众>:<对象>:<动作> 或 OIDC 标准值 |
aud | 令牌的受众,决定这枚令牌能调用哪些资源服务器 |
acr | 本次认证的强度等级(aal1 / aal2),随令牌下发 |
state | 你自己生成的防 CSRF 随机串,原样回传 |