簡體   English   中英

另一個“無法驗證oauth簽名和令牌”

[英]Yet another “Failed to validate oauth signature and token”

我遇到了許多其他人都遇到過的問題。 我所做的一切都正確,但仍然出現此煩人的“無法驗證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)
    }

如果將Logger放在方括號內,它將在終端窗口中顯示日志。 但是重定向似乎只是被忽略了。 永不熄滅。

您尚未包含必需的oauth_callback參數。 請參閱此處的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM