推特授权
Twitter Authorization
2 天来,我尝试使用 unirest(我必须使用它)向 Twitter 发出请求,但我没有从其他我做错的事情中得到很好的反馈。
这是我的要求:
HttpResponse request = Unirest.post( "https://api.twitter.com/1.1/account/settings.json" )
.header( "Authorization",
"oauth_consumer_key=\"XXX\"," +
"oauth_token=\"XXX\"," +
"oauth_signature=\"XXX\"" +
"oauth_nonce=\"XXX\"," +
"oauth_signature_method=\"HMAC-SHA1\"," +
"oauth_timestamp=\"1467448738\"," +
"oauth_version=\"1.0\","
)
.header( "Content-Type", "application/json" )
.header( "accept", "application/json" )
.header( "X-Target-URI", "https://api.twitter.com" )
.header( "Host", "api.twitter.com" )
.header( "Connection", "Keep-Alive" ).asJson();
我得到
{"errors":[{"code":215,"message":"Bad Authentication data."}]}
使用此页面很容易做到 https://apigee.com/console/twitter 但我明白了
oauth_timestamp、oauth_nonce、oauth_signature每次随机生成。 (我必须以某种方式生成它们吗?)
http://quonos.nl/oauthTester/ - 这个网站帮我检查了 oauth 签名
而这个 https://dev.twitter.com/oauth/tools/signature-generator/<+my id> 为我生成了签名基础字符串、授权 header、cURL 命令
我还有来自 https:// apps.twitter.com/app/ 的密钥
消费者密钥(API 密钥)
消费者机密(API 机密)
访问令牌
访问令牌秘密
(以及访问读取、写入和直接消息)
但每次我都会出错。
那么我的代码有什么问题吗?我错过了什么吗?
谢谢!
oauth_timestamp 不是随机生成的,它是当前时间。例如你上面的例子是(用http://www.onlineconversion.com/unix_time.htm验证)
Sat, 02 Jul 2016 08:38:58 GMT
oauth_nonce 是随机的,如下面的帮助页面所述,例如"base64 encoding 32 bytes of random data".
oauth_signature是根据你的请求参数计算出来的,有时postbody,clienttoken/secret等
https://dev.twitter.com/oauth/overview/authorizing-requests
https://dev.twitter.com/oauth/overview/creating-signatures
这是一些用于签署请求的示例代码
https://github.com/yschimke/okurl/blob/release/1.4/src/main/java/com/baulsupp/oksocial/services/twitter/Signature.java
2 天来,我尝试使用 unirest(我必须使用它)向 Twitter 发出请求,但我没有从其他我做错的事情中得到很好的反馈。
这是我的要求:
HttpResponse request = Unirest.post( "https://api.twitter.com/1.1/account/settings.json" )
.header( "Authorization",
"oauth_consumer_key=\"XXX\"," +
"oauth_token=\"XXX\"," +
"oauth_signature=\"XXX\"" +
"oauth_nonce=\"XXX\"," +
"oauth_signature_method=\"HMAC-SHA1\"," +
"oauth_timestamp=\"1467448738\"," +
"oauth_version=\"1.0\","
)
.header( "Content-Type", "application/json" )
.header( "accept", "application/json" )
.header( "X-Target-URI", "https://api.twitter.com" )
.header( "Host", "api.twitter.com" )
.header( "Connection", "Keep-Alive" ).asJson();
我得到
{"errors":[{"code":215,"message":"Bad Authentication data."}]}
使用此页面很容易做到 https://apigee.com/console/twitter 但我明白了 oauth_timestamp、oauth_nonce、oauth_signature每次随机生成。 (我必须以某种方式生成它们吗?)
http://quonos.nl/oauthTester/ - 这个网站帮我检查了 oauth 签名
而这个 https://dev.twitter.com/oauth/tools/signature-generator/<+my id> 为我生成了签名基础字符串、授权 header、cURL 命令
我还有来自 https:// apps.twitter.com/app/ 的密钥 消费者密钥(API 密钥) 消费者机密(API 机密) 访问令牌 访问令牌秘密 (以及访问读取、写入和直接消息)
但每次我都会出错。
那么我的代码有什么问题吗?我错过了什么吗?
谢谢!
oauth_timestamp 不是随机生成的,它是当前时间。例如你上面的例子是(用http://www.onlineconversion.com/unix_time.htm验证)
Sat, 02 Jul 2016 08:38:58 GMT
oauth_nonce 是随机的,如下面的帮助页面所述,例如"base64 encoding 32 bytes of random data".
oauth_signature是根据你的请求参数计算出来的,有时postbody,clienttoken/secret等
https://dev.twitter.com/oauth/overview/authorizing-requests https://dev.twitter.com/oauth/overview/creating-signatures
这是一些用于签署请求的示例代码 https://github.com/yschimke/okurl/blob/release/1.4/src/main/java/com/baulsupp/oksocial/services/twitter/Signature.java