使用生成式 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。
在门户创建
- 登录 develop.swaymoon.com,进入标识符,点击 +。
- 描述填写同意页可识别的名称;客户端类型选非机密客户端(创建后不可改为机密)。
- 图标可用默认或上传裁剪。
- 重定向 URI登记回调地址。Python 非机密 demo 使用:
http://127.0.0.1:8765/callback。 - 功能:保留必选
openid;按需设置email与资料细项(可选或必选;必选须填理由与隐私政策)。详见《权限与同意》。 - 确认后点「注册」,复制
client_id(无client_secret)。
http://127.0.0.1 与 http://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 未授权资料项为默认占位值(见《令牌与用户信息》)。 - 需要「保持登录」时,引入可保管密钥的服务端并改用机密客户端 + 自有会话。
排错见《示例与排错》。