获取OAuth 2.0 Bearer Token成功但调用Twitter首页时间线返回220错误
首先直接给你明确结论:标准Twitter API(现在叫X API v1.1)的用户上下文接口(比如Home Timeline)不支持OAuth 2.0 Bearer Token,这类接口必须使用OAuth 1.0a授权。下面给你拆解细节:
1. OAuth 2.0 Bearer Token的适用范围
Twitter的OAuth 2.0 Bearer Token仅适用于应用-only的请求场景——也就是不需要访问用户私人数据的公开操作,比如:
- 搜索公开推文
- 获取公开用户的基本资料
- 查询公开的话题趋势
这种令牌是基于应用本身的身份生成的,没有绑定任何用户的权限上下文,所以无法访问需要用户授权的私有资源(比如你的Home Timeline、用户的私人推文列表)。
2. 你遇到220错误的原因
Home Timeline接口需要读取用户的个性化时间线,属于用户上下文敏感的请求,必须通过OAuth 1.0a完成用户授权,获取带有用户权限的access token和access token secret,并且在请求时完成OAuth 1.0a的签名验证(而不是简单的Authorization: Bearer <token>请求头)。
你用OAuth 2.0的Bearer Token调用这个接口,自然会被判定为权限不足,返回220错误。
3. 文档混乱的原因
早期Twitter的文档确实存在部分表述模糊的情况:有些文档提到了OAuth 2.0支持,但那仅针对应用-only场景;而用户上下文接口的文档一直明确要求使用OAuth 1.0a,只是不同文档板块的更新节奏不一致,导致了你看到的矛盾信息。现在X(原Twitter)的官方文档已经明确区分了两种授权的适用场景,建议以最新的接口文档为准。
4. 解决办法
如果要正常调用Home Timeline接口,你需要切换到OAuth 1.0a的授权流程:
- 引导用户完成授权,获取用户级别的
access token和access token secret - 在请求时,按照OAuth 1.0a的规范生成签名,并将签名信息放入请求头中
内容的提问来源于stack exchange,提问作者Sampath Mark

