跳到正文
MuoCeon 文档中心
第三方 OAuth 接入接入准备

申请客户端与登记回调

提交哪些资料、拿到什么凭证、回调地址有哪些硬性规则。

在写第一行代码之前,你必须先拥有一个已登记的客户端。授权服务器只认登记过的 client_id 与回调地址,任何未登记的组合都会被直接拒绝。

开发者平台尚未上线

当前无法自助创建客户端。请按本页的清单准备资料并提交给 MuoCeon 运营侧代为登记;登记完成后你会拿到 client_id,机密客户端还会额外拿到 client_secret(仅展示一次,请妥善保存)。后续平台上线后,流程与字段保持一致。

需要提交的资料

字段是否必填说明
应用名称✅会原样展示在同意页,用户据此判断「要不要把这个账号交给它」
应用类型✅第三方 / 服务端到服务端(第一方由 MuoCeon 内部登记)
回调平台✅web_server / web_client / desktop / ios_macos / android,决定保密等级与令牌有效期
回调地址✅必须满足本页下方的地址规则,一个客户端至少一个
需要的 scope✅只能申请可委托 scope,见 scope 与受众
应用主页 / 隐私政策建议审核时会关注,也便于用户在同意页核实来源
应用图标可选展示在同意页

客户端类型

类型谁在用是否有用户是否有设备身份
first_partyMuoCeon 自建应用是是(did)
third_party外部开发者,也就是你是否
machine服务端到服务端否否

类型决定了三件你绕不开的事:能不能用 client_credentials(只有 machine 可以)、令牌里带不带 did(只有第一方带)、能不能申请自管理 scope(只有第一方可以)。

回调平台与令牌有效期

平台不是「随便选一个」,而是直接推导出客户端的保密等级和令牌 TTL 上限。

平台允许的回调地址形态保密等级访问令牌刷新令牌
web_serverhttps://host/path(必须带路径);本机回环可用 http://localhost:3000/path机密1 小时30 天
web_client同 web_server 的地址规则公开30 分钟14 天
desktop回环地址(必须带路径)或自定义 scheme(如 myapp://callback)公开30 分钟14 天
ios_macoscom.muoceon.<bundle-id>://auth公开30 分钟14 天
androidcom.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 与登记值做比较:

  1. 精确匹配:协议、主机、端口、路径、末尾斜杠全部一致才算通过。
  2. 回环地址例外:主机是 localhost / 127.0.0.1 / [::1] 时,只忽略端口,路径仍需一致。
  3. 请求未携带 redirect_uri:只有当该客户端只有一个可用回调地址时才回退使用它;登记了多个地址却省略参数,会被判定为非法请求。

细节与常见拒绝原因见 回调地址策略。

登记完成后的自检清单

  • 拿到 client_id,机密客户端另存好 client_secret(不进前端、不进仓库)。
  • 确认回调平台与产品形态一致,且没有「一个客户端混用多种形态」。
  • 确认申请的 scope 全部属于可委托范围,且都是功能真正需要的。
  • 授权请求里总是显式携带 redirect_uri,不要依赖回退逻辑。
  • 准备一个可持久化的 state 存储,用于回调时比对。

本页目录