私は他の多くの人が経験したこの問題を抱えています。私はすべて正しいことをしていますが、それでもこの厄介な「oauth署名とトークンの検証に失敗しました」というエラーが表示されます:)
まあ、何かが間違っていると思います..
ヘッダー付きの「 https://api.twitter.com/oauth/request_token 」に投稿して、 request_token を取得しようとしています。
Authorization:
OAuth oauth_consumer_key="MYVq....................ywj2g",
oauth_nonce="m8NG0s4oc87AOIpuILafAeI1YoMv5Mu9",
oauth_signature="Bxb%252FFIfOG9KLVj%252FUNdV%252FycVlGPs%253D",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1378976842",
oauth_version="1.0"
しかし、署名とトークンについて文句を言います。私の署名はどういうわけか無効ですか?そして、このリクエストにはトークンは必要ありませんか??
何が悪いのかわかりません。
これが私のgetRequestTokenコードの一部です:
val oauth_consumer_key: String = CONSUMER_KEY
val oauth_nonce: String = generateNonce()
val oauth_timestamp: String = (System.currentTimeMillis / 1000).toString
var oauth_signature: String = ""
val oauth_signature_method: String = "HMAC-SHA1"
val oauth_version: String = "1.0"
val PARAMETER_STRING: String =
"oauth_consumer_key=" + oauth_consumer_key + "&" +
"oauth_nonce=" + oauth_nonce + "&" +
"oauth_signature_method=" + oauth_signature_method + "&" +
"oauth_timestamp=" + oauth_timestamp + "&" +
"oauth_version=" + oauth_version
val BASE_STRING: String =
"POST&" + URLEncoder.encode("https://api.twitter.com/oauth/request_token", "UTF-8") + "&" + URLEncoder.encode(PARAMETER_STRING, "UTF-8")
oauth_signature = getSignature(CONSUMER_SECRET, BASE_STRING, "HmacSHA1")
val AUTHORIZATION = "OAuth " +
"oauth_consumer_key=\"" + URLEncoder.encode(oauth_consumer_key, "UTF-8") +
"\", oauth_nonce=\"" + URLEncoder.encode(oauth_nonce, "UTF-8") +
"\", oauth_signature=\"" + URLEncoder.encode(oauth_signature, "UTF-8") +
"\", oauth_signature_method=\"" + URLEncoder.encode(oauth_signature_method, "UTF-8") +
"\", oauth_timestamp=\"" + URLEncoder.encode(oauth_timestamp, "UTF-8") +
"\", oauth_version=\"" + URLEncoder.encode(oauth_version, "UTF-8") + "\""
WS.url("https://api.twitter.com/oauth/request_token").withHeaders("Authorization" -> AUTHORIZATION).post(Results.EmptyContent()).map(response => {
if(response.status != 200) Logger.error(response.body) //THIS IS WHERE I GET THE ERROR
else {
if((response.json \ "oauth_callback_confirmed").as[String] == "true") {
REQUEST_TOKEN = (response.json \ "oauth_token").as[String]
REQUEST_SECRET = (response.json \ "oauth_token_secret").as[String]
requestDone.success(true)
}
}
})
わかりましたので、すべてが機能するようになりました(oauth_callbackパラメーターなしで、これを追加するとエラーが再び発生するため)。Request_token を取得します。これは、生成されたリクエスト トークンと共に認証 URL をブラウザーに手動で貼り付けると、Twitter 認証ページにリダイレクトされ、正しいコールバックが行われ、結果も正しいためです。(トークン、token_secret、user_id、および screen_name)
しかし、私のコードは、この承認ページへのリダイレクトを無視しているようです。
requestToken_future.map { result =>
Redirect("https://api.twitter.com/oauth/authenticate?oauth_token="+REQUEST_TOKEN)
}
ロガーを括弧内に配置すると、ターミナル ウィンドウにログが表示されます。しかし、そのリダイレクトは無視されているようです。消えることはありません。