OAuth 2.0 授权流程
小红书开放平台完全遵循 OAuth 2.0 标准协议
(RFC 6749),
本页描述的授权码模式(Authorization Code)+ PKCE 扩展(RFC 7636)
主要用于移动 App-to-App 场景(iOS / Android SDK 拉起小红书 App 授权)。
Web 应用与车机应用请查看
设备授权模式(Device Grant,RFC 8628)——
二者统一走扫码授权,服务端轮询获取 Token。
核心概念
| 概念 | 说明 |
|---|---|
app_id | 应用唯一标识,格式 xhs + 12 位随机字符 |
app_secret | 应用密钥,形如 sk_************,Secret 模式使用 |
code | 授权码,10 分钟一次性有效,用于换取 access_token |
access_token | 访问令牌,有效期 2 小时,调用开放接口时使用 |
refresh_token | 刷新令牌,有效期 180 天,用于换取新的 access_token |
open_id | 用户在当前应用下的唯一标识,同一用户在不同应用的 open_id 不同 |
scope | 授权范围,声明应用需要访问哪些用户数据 |
state | 透传字段,防 CSRF 攻击,原样返回 |
授权时序图
下图展示了完整的 App-to-App 授权流程:
开发者App 小红书App 开发者服务端 账号服务端
│ │ │ │
(1) │──── 拉起授权 ──────>│ │ │
│ (app_id/scope/ │ │ │
│ state/challenge) │ │ │
│ │ │ │
│ (2) 用户确认授权 │ │
│ │ │ │
│ │───── 请求 code ────────────────────────> │
│ │ │ │
│ │<──── 返回 code ──────────────────────── │
│ │ │ │
(3) │<──── 回传 code ─────│ │ │
│ │ │ │
(4) │──── 上传 code ─────────────────────────>│ │
│ │ │ │
│ │ (5) │──── code 换 token ─────>│
│ │ │ (+ app_secret 或 │
│ │ │ code_verifier) │
│ │ │ │
│ │ (6) │<─── access/refresh ──────│
│ │ │ │
(7) │<─── 登录成功 ──────────────────────────│ │
两种认证模式对比
Secret 模式(默认)
平台默认的授权码认证方式,通过 app_id + app_secret + code 换取 token。
适用于可安全存放 app_secret 的移动端 App(iOS / Android,app_secret 保存在应用服务端)。
关键流程
- 客户端发起授权,无需生成 code_verifier
- 换取 token 时携带 app_id + app_secret + code
- 服务端校验 app_secret 匹配后颁发 token
PKCE 模式
PKCE(Proof Key for Code Exchange)是 OAuth2 针对公共客户端设计的授权扩展, 客户端无需持有 app_secret。适用于完全公开分发、无法在本地保护 app_secret 的场景。
关键流程
- 客户端生成
code_verifier(128 位随机字符串) - 对
code_verifier做 SHA256 哈希后 URL-Safe Base64 编码,得到code_challenge - 发起授权时携带
code_challenge和code_challenge_method=S256 - 换取 token 时携带
code_verifier,服务端做 hash 比对
Token 生命周期
| 令牌 | 有效期 | 存储位置 | 获取方式 |
|---|---|---|---|
| 授权码 code | 10 分钟 | 一次性使用后销毁 | 用户授权后颁发 |
| access_token | 2 小时 | 客户端持久化 | code 换取或 refresh_token 刷新 |
| refresh_token | 180 天 | 客户端安全存储 | code 换取时同步颁发 |
注意:调用 refresh_token 刷新时 不会延长 refresh_token 的过期时间,防止 refresh_token 被窃取后无限续期。 180 天到期后,用户需要重新授权。
回调地址(redirect_uri)
当前平台所有接入形态均不需要 redirect_uri,管理中心申请表单也已移除该字段:
- 移动 App-to-App:通过 SDK 内建的 URL Scheme 回调,SDK 已封装。
- Web 应用 / 车机应用:走 设备授权流程,由应用服务端轮询获取 Token, 不存在浏览器 / 客户端 302 回跳环节。
下一步
- 查看 API 参考 了解具体接口
- 查看 iOS SDK 或 Android SDK 接入示例
- Web 应用 / 车机应用请查看 设备授权流程
- 查看 错误码 处理异常场景