流程概览
第一步:注册 App
在袋袋 Studio 中创建你的 App:- 进入 app.profy.cn/studio
- 创建一个新的 App
- 在 App 设置中配置 OAuth 相关信息:
- Client ID:自动生成的 App UUID
- Client Secret:在设置中生成(SHA-256 哈希存储,仅展示一次)
- Redirect URIs:注册你的回调地址(支持多个)
第二步:引导用户授权
将用户重定向到袋袋授权页面:
用户会看到袋袋的授权页面,展示你的 App 名称和请求的权限。用户同意后,袋袋会将用户重定向回你的回调地址。
第三步:接收授权码
用户授权后,袋袋将用户重定向到你的redirect_uri:
第四步:换取 Token
使用授权码换取 Access Token 和 Refresh 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 对:吊销 Token
当用户注销或你需要撤回访问时,调用吊销端点:200 OK。
可用 Scopes
安全最佳实践
使用 state 参数防止 CSRF
使用 state 参数防止 CSRF
在发起授权请求时生成随机 state 值,回调时验证 state 是否匹配。
安全存储 Token
安全存储 Token
- 服务端:使用加密存储(数据库加密列、密钥管理服务)
- 客户端:使用 httpOnly cookie 或安全存储
- 不要在 URL、日志或前端 localStorage 中存放 Refresh Token
严格匹配 Redirect URI
严格匹配 Redirect URI
袋袋会严格校验 redirect_uri 是否在注册列表中。请确保注册的 URI 包含完整路径,避免开放重定向漏洞。
安全存储 Client Secret
安全存储 Client Secret
Client Secret 应仅在服务端使用,不要暴露在前端代码中。使用环境变量或密钥管理服务存储。
错误处理
下一步
Events API
通过 OAuth Token 上报自定义计费事件
App 开发指南
完整的 App 开发流程

