注册与配置 开发人员

上次更新:2026年8月12日

注册与配置

接入前,请先在开发者门户创建 OAuth / OIDC 客户端(页面称为标识符),配置重定向 URI 与权限,并按客户端类型取得凭证。协议接入(授权码、令牌、同意页等)见本目录下《接入概述》及后续文档。

2026-08-11:标识符权限可在门户编辑;强制权限须填理由与隐私政策;用户每次登录须确认授权。变更说明见同目录「更新」下的《2026-08-11权限与同意平台更新》。

入口

  1. 使用通行账户登录 develop.swaymoon.com
  2. 在首页「计划资源」中进入标识符(侧栏亦有同名入口)。
  3. 点击左上角 +,打开「注册应用标识符」向导。
  4. 按照向导依次完成:描述 → 图标 → 重定向 URI → 功能 → 确认。

开发者门户通过通行账户 API(https://api-passport.swaymoon.com/api/v1/developer/...)管理客户端。执行相关操作前,你需要先登录通行账户。

客户端类型

类型clientType认证方式适用场景
机密客户端confidential(默认)client_secret_basic可由后端安全保管 client_secret 的 Web / 服务端应用
非机密客户端publicnone(仅 PKCE)纯 HTML / 静态站 / 纯 SPA、原生客户端等:运行时不宜保管 client_secret

两者均强制 PKCE(S256),并要求用户在授权页显式确认后登录(不会因「此前已授权」而静默跳过)。客户端类型在创建后不可互转

向导字段

步骤字段说明
描述描述、客户端类型「描述」即应用名称,展示在用户同意页;类型见上表(编辑时类型只读)
图标默认图标或上传裁剪同意页展示;默认可按应用首字生成;也可上传 JPEG / PNG / WebP,裁剪为约 512×512 正方形 JPEG(不超过 512KB)
重定向 URIRedirect URI 白名单授权成功或取消后,用户浏览器返回的地址;至少配置一条,且须与授权请求中的 redirect_uri 完全一致(可添加多条)。本地可用 http://127.0.0.1
重定向 URI数据删除回调地址(可选)用户请求删除数据时,由通行账户服务端 POST 签名请求包的地址(不是浏览器跳转)。见下文「数据删除回调地址」
重定向 URI隐私政策链接用户在同意页与「应用授权」详情中可见;点击前会提示该域不在摇月控制下。申请任一强制权限(除 openid 外的必选)时必填。见下文「隐私政策链接」
功能必选 / 可选 scope 与理由新建与编辑均可配置;openid 始终必选;email 与资料细项可设为必选、可选或不申请。设为必选时须填写对用户可见的理由,并配置隐私政策。详见《权限与同意》
确认新建点「注册」;编辑点「保存」可更新名称 / 图标 / 回调 / 数据删除地址 / 隐私政策 / 权限与理由

创建结果

机密客户端

字段说明
client_idswm_ 开头的客户端标识,可以公开出现在授权 URL 中
client_secret仅在创建时展示一次,请立即将其存入密钥管理系统;如有遗失,需删除标识符并重新创建

配置要点:

  • 认证方式:client_secret_basic
  • 授权类型:authorization_coderefresh_token
  • Access Token 约 5 分钟;Refresh Token 约 180 天(刷新后不再重复使用旧的 Refresh Token)

非机密客户端

字段说明
client_idswm_ 开头的客户端标识
client_secret不发放

配置要点:

  • 认证方式:none
  • 授权类型:仅 authorization_code不签发 refresh_token;Access Token 过期后重新走授权码流程)
  • Access Token 约 5 分钟
  • 换取令牌时在请求体提交 client_idcode_verifier不要使用 HTTP Basic
  • 可运行联调见《Python 最小可运行示例》;AI 辅助见《使用生成式 AI 接入机密客户端》《使用生成式 AI 接入非机密客户端》

重定向 URI(Redirect URI)规则

  • 必须提供至少一条非空 URI。
  • 授权请求中的 redirect_uri 必须与登记值逐字符一致,包括 scheme、host、port、path 和 query。
  • 不要在 Redirect URI 中使用 #fragment(协议不允许)。
  • 生产环境强烈建议使用 https://。本地开发可以使用 http://127.0.0.1:... 等环回地址,但须符合服务器的校验策略。
  • 不支持通配符域名。对于多个环境,请分别登记对应的 URI。
  • http://127.0.0.1http://localhost 视为不同地址。
  • 谁在访问:授权完成后由用户浏览器跳转到该地址。因此登记 http://127.0.0.1:8766/callback 时,只要浏览器与本地 demo 在同一台电脑上,登录回调即可到达。

数据删除回调地址

可选。用户在通行账户隐私中心选择「撤销并请求删除数据」时,通行账户会:

  1. 撤销对该应用的授权;
  2. 向应用负责人绑定邮箱发送说明邮件;
  3. 若已配置本地址,由通行账户 API 进程所在机器向该 URL 发起 POST(签名约定见《权限与同意》)。
说明
是否必填否;未配置则只发邮件、不发 HTTP 回调
允许的 URL可被通行账户服务端访问的 https://…
禁止http://(任意)、127.0.0.1localhost::1 等回环地址
谁在访问Passport 服务端,不是浏览器(因此不能照搬登录用的 loopback Redirect)
本地联调使用 ngrok、Cloudflare Tunnel 等把本机接收端暴露为 HTTPS,把隧道 URL 登记于此;点删除时隧道与接收端须已在运行
与 Redirect登录 Redirect 仍可用 http://127.0.0.1(浏览器跳转);删除回调与登录回调不是同一条通路
签名密钥机密:创建时下发的 client_secret 明文非机密(已配回调):创建时下发的 webhookSecret。须对原始 body 验签,见《权限与同意》

可运行联调见《Python 最小可运行示例》机密客户端一节的「演示数据删除回调」。

隐私政策链接

可选。登记后,用户可在:

  • 授权同意页(若已配置);
  • 通行账户 隐私应用授权 → 应用详情;

查看并打开该链接。点击跳转前,通行账户会提示:该域不在摇月 Swaymoon 控制下,其内容不受摇月 Swaymoon 管理。

说明
是否必填申请除 openid 外的强制权限时必填;否则可选
允许的 URL公网 https://…;本地联调可用 http://127.0.0.1 / http://localhost(亦可用 https://
禁止非回环主机的 http://
谁在访问用户浏览器(与登录 Redirect 相同,不是服务端出站)
API 字段创建 / 更新客户端请求体中的 privacyPolicyUri

建议在应用正式上线前配置可公开访问的 HTTPS 隐私政策页,便于用户在授权前了解你方如何处理其数据。

权限配置建议

需求建议 scope
仅登录、建立本地账号openid
需要展示用户称呼openid + name(必要时再加 nickname / picture;可设可选或必选)
需要联系邮箱openid + email(可在门户设为必选或可选;可选时尊重用户取消)
需要在本应用存储用户名openid + preferred_username(若设为必选,须填写理由与隐私政策)

openid 始终为必选。将 email 或资料细项设为必选时,须填写对用户可见的理由,并配置隐私政策链接。可选权限在同意页默认勾选,用户可以取消,详见《权限与同意》。

管理操作

  • 列表:查看已创建的标识符、名称、client_id、客户端类型与认证方式、必选 / 可选权限。
  • 编辑:可修改描述(名称)、图标、重定向 URI、数据删除回调地址、隐私政策链接、必选 / 可选权限与强制权限理由
  • 不可编辑:客户端类型(机密 / 非机密)创建后锁定。若需更换客户端类型,请删除旧标识符并重新注册,再更新应用内的 client_id / client_secret 配置。
  • 删除:删除标识符后,已发放的令牌将无法继续用于该客户端,用户侧的授权关系也会失效。

兼容提示:已上线的旧客户端无需因平台支持「可编辑权限 / 强制授权确认」而改代码;新客户端开发请以最新文档为准。详见《权限与同意》。

创建客户端可调用 POST /api/v1/developer/clients,在 JSON 体中传入 clientTyperequiredScopes / optionalScopesscopeReasons,以及可选的 dataDeletionUriprivacyPolicyUri。更新已有客户端可调用 PUT /api/v1/developer/clients/{clientId}(可更新权限与理由)。

下一步:阅读同目录《接入概述》,再实现《授权码与 PKCE》。