OAuth 授权流程
采用 RFC 6749 授权码模式(Authorization Code),并支持 RFC 7636 PKCE。整体四步:引导授权 → 拿到 code → 换取 token → 调用资料接口。
1. 引导用户到授权页
在你的应用里打开如下地址(Android 用 Custom Tabs,iOS 用 ASWebAuthenticationSession,Web 用当前页跳转):
https://open.jintuzi.com/oauth/authorize
?response_type=code
&client_id=你的_app_id
&redirect_uri=https%3A%2F%2Fyour-app.com%2Fcallback
&scope=user:avatar%20user:nickname%20user:jintuzi_no
&state=随机防伪串
&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
&code_challenge_method=S256
| 参数 | 必填 | 说明 |
|---|---|---|
response_type | 是 | 固定 code |
client_id | 是 | 应用详情页的 AppID |
redirect_uri | 是 | 必须与后台登记的回调地址完全一致 |
scope | 是 | 空格分隔,取值见字段定价;不能超出应用被允许的范围 |
state | 建议 | 原样回传,用于防 CSRF,最长 200 字符 |
code_challenge | 公开客户端必填 | PKCE 的 S256 摘要(43~128 位 verifier 的 SHA-256,base64url 无填充) |
code_challenge_method | 同上 | 固定 S256 |
2. 用户同意后回调
https://your-app.com/callback?code=J8s...&state=随机防伪串
用户点「拒绝」时回调为 ?error=access_denied&state=...。请务必校验 state 与自己发起时一致。
3. 用 code 换 token
curl -X POST 'https://open.jintuzi.com/oauth/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=authorization_code' \
-d 'code=J8s...' \
-d 'redirect_uri=https://your-app.com/callback' \
-d 'client_id=你的_app_id' \
-d 'client_secret=你的_app_secret' \
-d 'code_verifier=原始随机串'
返回:
{
"access_token": "jz_at_...",
"token_type": "Bearer",
"expires_in": 7200,
"refresh_token": "jz_rt_...",
"scope": "user:avatar user:nickname user:jintuzi_no"
}
4. 刷新令牌
curl -X POST 'https://open.jintuzi.com/oauth/token' \
-d 'grant_type=refresh_token' \
-d 'refresh_token=jz_rt_...' \
-d 'client_id=你的_app_id' \
-d 'client_secret=你的_app_secret'
每次刷新都会返回新的 refresh_token,旧的立即失效。请把新值持久化;若旧值被再次使用,平台会撤销该用户在该应用下的全部令牌,并要求用户重新授权。
5. 获取资料
curl 'https://open.jintuzi.com/oauth/userinfo' \
-H 'Authorization: Bearer jz_at_...'
授权页是标准页,不要自己画
授权页由平台托管(含用户登录、字段与价格展示、同意/拒绝),第三方应用不得仿制或诱导用户输入金兔子账号密码。