跳转到主要内容
袋袋实现了标准的 OAuth 2.0 Authorization Code 流程,允许你的 App 代表用户调用袋袋 API。通过 OAuth 授权,积分将从用户的账户中扣除。

流程概览

第一步:注册 App

在袋袋 Studio 中创建你的 App:
  1. 进入 app.profy.cn/studio
  2. 创建一个新的 App
  3. 在 App 设置中配置 OAuth 相关信息:
    • Client ID:自动生成的 App UUID
    • Client Secret:在设置中生成(SHA-256 哈希存储,仅展示一次)
    • Redirect URIs:注册你的回调地址(支持多个)
Client Secret 仅在生成时展示一次,请妥善保存。Redirect URI 必须严格匹配注册列表中的地址,否则授权会被拒绝。

第二步:引导用户授权

将用户重定向到袋袋授权页面:
用户会看到袋袋的授权页面,展示你的 App 名称和请求的权限。用户同意后,袋袋会将用户重定向回你的回调地址。

第三步:接收授权码

用户授权后,袋袋将用户重定向到你的 redirect_uri
授权码(Authorization Code)有效期为 5 分钟,且只能使用一次。请在收到后立即换取 Token。

第四步:换取 Token

使用授权码换取 Access Token 和 Refresh Token:
Token 端点也支持 application/x-www-form-urlencoded 格式。

Token 生命周期

Access Token

  • JWT 格式(RS256 签名)
  • 包含 sub(用户 ID)、aud(App UUID)、scope(权限范围)
  • 过期后使用 Refresh Token 获取新 Token

Refresh Token

  • 不透明字符串格式
  • 旋转机制:每次使用后旧 Token 失效,返回新的 Refresh Token
  • 使用过的 Refresh Token 不能再次使用

第五步:刷新 Token

当 Access Token 过期时,使用 Refresh Token 获取新的 Token 对:
Refresh Token 使用旋转机制。每次刷新后,你必须保存新的 Refresh Token。旧的 Refresh Token 在使用后立即失效。

吊销 Token

当用户注销或你需要撤回访问时,调用吊销端点:
吊销端点遵循 RFC 7009 规范——即使 Token 已失效,也会返回 200 OK

可用 Scopes

安全最佳实践

在发起授权请求时生成随机 state 值,回调时验证 state 是否匹配。
  • 服务端:使用加密存储(数据库加密列、密钥管理服务)
  • 客户端:使用 httpOnly cookie 或安全存储
  • 不要在 URL、日志或前端 localStorage 中存放 Refresh Token
袋袋会严格校验 redirect_uri 是否在注册列表中。请确保注册的 URI 包含完整路径,避免开放重定向漏洞。
Client Secret 应仅在服务端使用,不要暴露在前端代码中。使用环境变量或密钥管理服务存储。

错误处理

下一步

Events API

通过 OAuth Token 上报自定义计费事件

App 开发指南

完整的 App 开发流程