使用生成式 AI 接入非机密客户端 开发人员

上次更新:2026年8月12日

使用生成式 AI 接入非机密客户端

本文面向希望借助生成式 AI、以非机密客户端clientType=public,认证方式 none)接入通行账户的开发者:适合纯 HTML、静态站或纯浏览器端应用。可运行脚本见《Python 最小可运行示例》。

若项目包含可保管密钥的服务端、API Route、Serverless Function 或 BFF,请改用机密客户端,阅读《使用生成式 AI 接入机密客户端》。

适用与不适用

更适合非机密客户端更适合机密客户端
纯 HTML / 静态站 / 纯 SPA(令牌交换在浏览器)有后端会话与密钥管理的 Web 应用
本地或演示用的轻量客户端需要 Refresh Token、长期会话的产品
桌面 / 移动端等无法安全嵌入密钥的客户端需要在服务端代用户调用受保护 API

产品约定(与门户一致):

  • 不发放 client_secret;换取令牌时不要使用 HTTP Basic。
  • 强制 PKCE(S256)
  • 不签发 refresh_token;Access Token 约 5 分钟,过期后重新走授权码流程。
  • 重定向 URI 须预先登记,且与授权请求中的 redirect_uri 逐字符一致。拼授权 URL 时用一次编码即可(例如 URLSearchParams / urllib.parse.urlencode),不要对已编码的 URI 再 encode

在门户创建

  1. 登录 develop.swaymoon.com,进入标识符,点击 +
  2. 描述填写同意页可识别的名称;客户端类型非机密客户端(创建后不可改为机密)。
  3. 图标可用默认或上传裁剪。
  4. 重定向 URI登记回调地址。Python 非机密 demo 使用:http://127.0.0.1:8765/callback
  5. 功能:保留必选 openid;按需设置 email 与资料细项(可选或必选;必选须填理由与隐私政策)。详见《权限与同意》。
  6. 确认后点「注册」,复制 client_id(无 client_secret)。

http://127.0.0.1http://localhost 视为不同地址。协议参数见《授权码与 PKCE》。

把提示词交给 AI

接入已有前端 / 静态项目时,可粘贴下列提示词(不要发送真实令牌或完整回调查询串):

请在当前纯前端 / 静态项目中接入「摇月 Swaymoon 通行账户」登录(非机密客户端)。
- clientType=public,认证方式 none;禁止 client_secret 与 HTTP Basic。
- Issuer:https://api-passport.swaymoon.com ;Discovery 为准。
- Authorization Code + PKCE(S256);换票表单含 grant_type、code、redirect_uri、client_id、code_verifier。
- 无 refresh_token;默认 scope 含 openid;需要时再加 email 或资料细项,勿用整包 profile。
- state / code_verifier 放 sessionStorage;以 sub 标识用户;输出须登记的 Redirect URI。

本地标准库联调见《Python 最小可运行示例》。有服务端时的提示词见《使用生成式 AI 接入机密客户端》。

安全要点

  • 登录与授权必须跳转官方通行账户域名。
  • client_id 可以出现在前端;勿编造 client_secret
  • 最小 scope;尊重用户取消可选权限;UserInfo 未授权资料项为默认占位值(见《令牌与用户信息》)。
  • 需要「保持登录」时,引入可保管密钥的服务端并改用机密客户端 + 自有会话。

排错见《示例与排错》。