ZYZHIXI OAuth2 关联授权文档

本文档定义了 Zibll OAuth2 代理服务的接口规范与安全建议。

1. 基础信息

项目说明
Base URLhttps://www.zyzhixi.com/wp-json/zibll-oauth/v1
认证模式标准 OAuth2 Authorization Code Grant
安全传输必须使用 HTTPS

2. 术语与参数

字段说明
client_id应用唯一标识(在 Provider 后台创建应用获取)
client_secret应用密钥(请勿泄露,仅限服务端使用)
redirect_uri授权回调地址(必须与后台配置完全一致,精确匹配)
code临时授权码(有效期 10 分钟,一次性)
access_token资源访问令牌(默认有效期 2 小时)
refresh_token刷新令牌(有效期 180 天,滑动过期,每次刷新会轮换)

3. 核心流程

3.1 授权 (Authorize)

引导用户在浏览器访问:GET /authorize

请求参数:

参数说明
response_type固定为 `code`
client_id应用标识
redirect_uri回调地址
state接入方生成的随机串(用于防 CSRF,回调时原样返回)
scope权限范围(默认 `basic`,可选 `email`, `profile`, `phone`)

用户同意后回调:{redirect_uri}?code={CODE}&state={STATE}

3.2 换取令牌 (Token)

接入方后端通过 code 换取令牌:POST /token

请求参数(Form 或 JSON):

参数说明
grant_type固定为 `authorization_code`
client_id应用标识
client_secret应用密钥
code回调获取的 code
redirect_uri必须与授权时一致

成功响应 (200 OK):

json

{

  “access_token”: “AT_xxx”,

  “token_type”: “bearer”,

  “expires_in”: 7200,

  “refresh_token”: “RT_xxx”,

  “refresh_token_expires_in”: 15552000

}

错误响应:

json

{

  “code”: “invalid_grant”,

  “message”: “code 无效或已过期”,

  “data”: {}

}

3.3 刷新令牌 (Refresh)

当 `access_token` 快过期时,使用 `refresh_token` 获取新令牌:POST /token

请求参数:

参数说明
grant_type固定为 `refresh_token`
client_id应用标识
client_secret应用密钥
refresh_token当前的 refresh_token

> 说明: `refresh_token` 采用旋转机制,每次刷新都会返回新的 refresh_token,旧令牌立即失效。

3.4 吊销令牌 (Revoke)

主动失效令牌:POST /revoke

请求参数:

参数说明
client_id应用标识
client_secret应用密钥
token要吊销的令牌
token_type_hint可选 `access_token` 或 `refresh_token`

成功响应 (200 OK):

json

{

  “revoked”: true

}

错误响应:

json

{

  “code”: “invalid_client”,

  “message”: “client_secret 无效”,

  “data”: {}

}

4. 用户信息接口

4.1 获取用户信息 (UserInfo)

GET /userinfo

Header: Authorization: Bearer <access_token>

成功响应 (200 OK):

json

{

  “userinfo”: {

    “openid”: “o_xxx”,

    “name”: “用户名”,

    “avatar”: “https://…”,

    “email”: “user@example.com”,

    “phone”: “+8613800000000”,

    “description”: “个人简介”

  }

}

4.2 获取 UnionID (UnionID)

GET /unionid

Header: Authorization: Bearer <access_token>

成功响应 (200 OK):

json

{

  “openid”: “o_xxx”,

  “unionid”: “123”

}

5. 服务端回调与签名安全

当异步任务(如撤销授权)完成时,Provider 会 `POST application/json` 到接入方。

5.1 撤销授权回调

当用户撤销授权时,Provider 会向应用配置的回调地址发送通知。

请求方法: `POST`  

Content-Type: `application/json`

请求体示例:

json

{

  “appid”: “app_xxx”,

  “openid”: “o_xxx”,

  “user_id”: 123,

  “status”: “revoked”,

  “revoked_at”: 1704067200,

  “timestamp”: 1704067200,

  “nonce”: “random_str”,

  “event_id”: “evt_xxx”,

  “sign2”: “sha256_signature”

}

字段说明:

字段说明
appid应用标识
openid用户 OpenID
user_id用户 ID
status状态(revoked)
revoked_at撤销时间(Unix 时间戳)
timestampUnix 时间戳
nonce随机字符串
event_id事件 ID(用于去重)
sign2签名

接入方应返回:

json

{

  “code”: 0,

  “message”: “success”

}

5.2 签名算法 (Sign2)

全链路仅支持 V2 全字段签名。算法如下:

1. 排除 `sign` 和 `sign2` 参数

2. 将剩余所有参数按 Key 的 ASCII 码升序排序

3. 将排序后的参数拼成 `key1=value1&key2=value2`(value 为数组或对象时转 JSON,字符进行 rawurlencode)

4. 使用 `client_secret` 作为 Key,对该字符串执行 HMAC-SHA256

5.3 幂等建议

回调 Payload 包含 `event_id`。接入方应:

验签:验证 `sign2`

去重:检查 `event_id` 是否已处理过

处理:执行业务逻辑并返回 200 OK

6. 错误码规范

错误码HTTP说明
invalid_request400参数缺失或格式错误
invalid_client401client_secret 校验失败
invalid_grant400code/refresh_token 无效或已过期
unauthorized_client403应用不存在或未启用
ip_not_allowed403调用 IP 不在白名单

部分开发者可能会使用 AI 工具辅助开发,这边直接提供MD文档。

zyzhixi-ouath.md
提取码
ZYZX
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容

...
Zzz...