第三方 OAuth 接入接入准备
申请客户端与登记回调
提交哪些资料、拿到什么凭证、回调地址有哪些硬性规则。
在写第一行代码之前,你必须先拥有一个已登记的客户端。授权服务器只认登记过的 client_id 与回调地址,任何未登记的组合都会被直接拒绝。
开发者平台尚未上线
当前无法自助创建客户端。请按本页的清单准备资料并提交给 MuoCeon 运营侧代为登记;登记完成后你会拿到 client_id,机密客户端还会额外拿到 client_secret(仅展示一次,请妥善保存)。后续平台上线后,流程与字段保持一致。
需要提交的资料
| 字段 | 是否必填 | 说明 |
|---|---|---|
| 应用名称 | ✅ | 会原样展示在同意页,用户据此判断「要不要把这个账号交给它」 |
| 应用类型 | ✅ | 第三方 / 服务端到服务端(第一方由 MuoCeon 内部登记) |
| 回调平台 | ✅ | web_server / web_client / desktop / ios_macos / android,决定保密等级与令牌有效期 |
| 回调地址 | ✅ | 必须满足本页下方的地址规则,一个客户端至少一个 |
| 需要的 scope | ✅ | 只能申请可委托 scope,见 scope 与受众 |
| 应用主页 / 隐私政策 | 建议 | 审核时会关注,也便于用户在同意页核实来源 |
| 应用图标 | 可选 | 展示在同意页 |
客户端类型
| 类型 | 谁在用 | 是否有用户 | 是否有设备身份 |
|---|---|---|---|
first_party | MuoCeon 自建应用 | 是 | 是(did) |
third_party | 外部开发者,也就是你 | 是 | 否 |
machine | 服务端到服务端 | 否 | 否 |
类型决定了三件你绕不开的事:能不能用 client_credentials(只有 machine 可以)、令牌里带不带 did(只有第一方带)、能不能申请自管理 scope(只有第一方可以)。
回调平台与令牌有效期
平台不是「随便选一个」,而是直接推导出客户端的保密等级和令牌 TTL 上限。
| 平台 | 允许的回调地址形态 | 保密等级 | 访问令牌 | 刷新令牌 |
|---|---|---|---|---|
web_server | https://host/path(必须带路径);本机回环可用 http://localhost:3000/path | 机密 | 1 小时 | 30 天 |
web_client | 同 web_server 的地址规则 | 公开 | 30 分钟 | 14 天 |
desktop | 回环地址(必须带路径)或自定义 scheme(如 myapp://callback) | 公开 | 30 分钟 | 14 天 |
ios_macos | com.muoceon.<bundle-id>://auth | 公开 | 30 分钟 | 14 天 |
android | com.muoceon.<package>://auth/<签名哈希> | 公开 | 30 分钟 | 14 天 |
一个客户端只能有一种保密等级
同一个产品如果既有服务端又有浏览器端,必须拆成两个客户端:web_server 那个持有 client_secret,web_client 那个不持有。把密钥塞进浏览器、或者让公开客户端共用机密客户端的 client_id,都是把密钥公开。
回调地址的硬性规则
登记时会被逐条校验,不满足即登记失败;授权请求阶段还会再校验一次。
- 必须是
https,或者本机回环的http(localhost/127.0.0.1/[::1]),且必须带非根路径——https://example.com这种没有路径的地址会被拒。 - 不允许出现 query、fragment、用户名密码(
https://example.com/cb?x=1、https://example.com/cb#frag、https://user:pass@example.com/cb都会被拒)。 - scheme 黑名单:
javascript、data、file、blob、about、vbscript。 - 长度上限 2048 字符,且必须能解析成合法 URL。
- 回环地址的端口允许变化(RFC 8252 §7.3),其余部分必须完全一致。
匹配规则
授权请求里的 redirect_uri 与登记值做比较:
- 精确匹配:协议、主机、端口、路径、末尾斜杠全部一致才算通过。
- 回环地址例外:主机是
localhost/127.0.0.1/[::1]时,只忽略端口,路径仍需一致。 - 请求未携带
redirect_uri:只有当该客户端只有一个可用回调地址时才回退使用它;登记了多个地址却省略参数,会被判定为非法请求。
细节与常见拒绝原因见 回调地址策略。
登记完成后的自检清单
- 拿到
client_id,机密客户端另存好client_secret(不进前端、不进仓库)。 - 确认回调平台与产品形态一致,且没有「一个客户端混用多种形态」。
- 确认申请的 scope 全部属于可委托范围,且都是功能真正需要的。
- 授权请求里总是显式携带
redirect_uri,不要依赖回退逻辑。 - 准备一个可持久化的
state存储,用于回调时比对。