当前位置: 首页 > 知识库问答 >
问题:

如何在我的请求中使用从Twitter OAuth 1.0a获得的“用户上下文访问令牌”?

金承嗣
2023-03-14

我成功地(?)实现Twitter三条腿认证过程以获取用户访问令牌。问题是访问令牌似乎无效。。。或者我用错了。我已经能够获得应用程序的访问令牌,它可以访问有限的Twitter API。我通过在头上添加“Authentication:Bearer'access token'”来使用它。但是,当我对用户上下文访问令牌执行相同的操作并执行相同的请求时,我总是得到错误代码89无效或过期的令牌。

我获得的访问令牌具有[几个数字]-[一些alpha数字字符]的结构。类似于12345678-asd98f798asdf79asdfa9sdfs9df7a9sdf7。这看起来与https://developer.twitter.com/en/docs/basics/authentication/oauth-1-0a/obtaining-user-access-tokens.第3步中的访问令牌示例相似

我还注意到,这里的示例请求如下:

POST statuses/update.json
oauth_consumer_key=cChZNFj6T5R0TigYB9yd1w
oauth_token=7588892-kagSNqWge8gB1WwE3plnFsJHAZVfxWD7Vb57p0b4

我认为这两个额外的参数将被添加到正文中,而不是标题中。但是,如果我的请求是GET请求怎么办?比如请求回家时间线,这绝对需要用户上下文访问令牌?

https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-home_timeline

从这个API参考中,示例只给出了GET url,而没有给出如何提供用户上下文访问令牌。请帮忙。我觉得解决方案非常简单(比如在标题上进行修复),但我看不出来。

这是我目前的请求:

curl -X GET \
  'https://api.twitter.com/1.1/users/show.json?screen_name=huffpost' \
  -H 'Authorization: Bearer 12345678-as3d12a3d1a3sd1232ads13asd123as1d23as3d32,Bearer 12345678-as3d12a3d1a3sd1232ads13asd123as1d23as3d32' \

结果是:

{
    "errors": [
        {
            "code": 89,
            "message": "Invalid or expired token."
        }
    ]
}

共有1个答案

韩单弓
2023-03-14

用户访问令牌需要对包含参数和标头的请求进行签名。

https://developer.twitter.com/en/docs/basics/authentication/oauth-1-0a/authorizing-a-request

你可以使用像这样的图书馆https://github.com/twitter/joauth生成签名。

JavaOkHttp-你可以使用这个库https://github.com/yschimke/okurl/blob/master/src/main/kotlin/com/baulsupp/okurl/services/twitter/joauth/Signature.kt#L33

 类似资料: