给其他软件产品
接入账号中心
和 Google 账号一样:用户只在本站注册一次。你的产品不要自己做注册表、不要连本站数据库, 走标准 OpenID Connect 拿身份,库里只存一个永久用户 ID。
0. 一行配置
任何支持 OpenID Connect 的库,喂给它这个地址就能跑起来。
https://account.yydsxwh.com/.well-known/openid-configuration
1. 站长登记产品
登录账号中心 → 软件产品 → 填名称、回调地址、客户端类型。 有自己后端的选 confidential 并保管好 client_secret; 纯前端或 App 选 public,不发密钥,改用 PKCE。
打开软件产品后台2. 把用户送过来
https://account.yydsxwh.com/api/oauth/authorize ?response_type=code &client_id=你的ID &redirect_uri=https://你的产品/api/auth/callback &scope=openid profile email &state=随机串 &nonce=随机串 &code_challenge=BASE64URL(SHA256(code_verifier)) &code_challenge_method=S256
没登录会先出登录页,登完原样跳回来;已登录直接带一次性 code 跳回产品。 回调地址必须和登记的完全一致,不支持通配符。
3. 产品服务端换令牌
POST https://account.yydsxwh.com/api/oauth/token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code &code=回调里的 code &redirect_uri=必须和上一步完全一致 &code_verifier=第二步那个随机串 &client_id=你的ID &client_secret=只放服务器(public 客户端不传)
返回 id_token、access_token,申请了 offline_access 还会带 refresh_token。 授权码 60 秒过期且只能用一次。
4. 校验 id_token,拿到用户 ID
// 公钥在 https://account.yydsxwh.com/.well-known/jwks.json
const { payload } = await jwtVerify(id_token, jwks, {
issuer: "https://account.yydsxwh.com",
audience: "你的ID",
algorithms: ["RS256"],
});
payload.sub // usr_xxx —— 产品库里只存这个issuer 和 audience 必须都校验。只验签名的话,别的产品的令牌也能拿来冒充。
5. 需要最新资料时
GET https://account.yydsxwh.com/api/oauth/userinfo Authorization: Bearer <access_token>
返回内容按 scope 裁剪。完整接入说明见仓库 docs/integration.md。