OAuth 2.0 授权流程

最后更新:2026-03-29 · 阅读约 8 分钟

小红书开放平台完全遵循 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 保存在应用服务端)。

关键流程

  1. 客户端发起授权,无需生成 code_verifier
  2. 换取 token 时携带 app_id + app_secret + code
  3. 服务端校验 app_secret 匹配后颁发 token
安全要点
app_secret 一旦泄露,攻击者可以伪造应用身份。请通过密钥管理系统(KMS)、Keychain / KeyStore 或混淆加密妥善保护,避免明文硬编码到分发物中。
PKCE 模式

PKCE(Proof Key for Code Exchange)是 OAuth2 针对公共客户端设计的授权扩展, 客户端无需持有 app_secret。适用于完全公开分发、无法在本地保护 app_secret 的场景。

关键流程

  1. 客户端生成 code_verifier(128 位随机字符串)
  2. code_verifier 做 SHA256 哈希后 URL-Safe Base64 编码,得到 code_challenge
  3. 发起授权时携带 code_challengecode_challenge_method=S256
  4. 换取 token 时携带 code_verifier,服务端做 hash 比对
适用价值
即使授权码在跳转过程中被截获,攻击者也无法在没有 code_verifier 的情况下换取 token;同时客户端完全不涉及 app_secret 存储。

Token 生命周期

令牌 有效期 存储位置 获取方式
授权码 code10 分钟一次性使用后销毁用户授权后颁发
access_token2 小时客户端持久化code 换取或 refresh_token 刷新
refresh_token180 天客户端安全存储code 换取时同步颁发

注意:调用 refresh_token 刷新时 不会延长 refresh_token 的过期时间,防止 refresh_token 被窃取后无限续期。 180 天到期后,用户需要重新授权。

回调地址(redirect_uri)

当前平台所有接入形态均不需要 redirect_uri,管理中心申请表单也已移除该字段:

  • 移动 App-to-App:通过 SDK 内建的 URL Scheme 回调,SDK 已封装。
  • Web 应用 / 车机应用:走 设备授权流程,由应用服务端轮询获取 Token, 不存在浏览器 / 客户端 302 回跳环节。

下一步