【问题标题】:Issue with API OAuth callback header not formatted correctlyAPI OAuth 回调标头格式不正确的问题
【发布时间】:2017-05-25 07:11:00
【问题描述】:

我正在尝试连接到 Twitters API 以获取我自己的推文。我在获取 Twitter 所需的 OAuth 的正确标头时遇到问题。以下是我到目前为止所拥有的,我有什么遗漏或做错了吗?

它还要求 HMAC-SHA1 要求两个输入一个 KEY 和 DATA。我相信根据 Twitter 的 KEY 将消费者秘密和 OAuth 令牌秘密结合在一起,但是 DATA 输入是什么?

import axios from 'axios'
import hmacsha1 from 'hmacsha1'


const tweet = 'http://api.twitter.com/1.1/search/tweets.json?q=SamSchaeferSays';


const consumerKey = "XXX";
let nonce = createNonce();;
const signatureMethod = "HMAC-SHA1";
const timeStamp = Date.now();
const token = "XXXX";
const hiddenToken ="XXXXX";
const sig = `${consumerKey}&${hiddenToken}`;
const signature = btoa(hmacsha1(sig, "ok"));

const DST = `OAuth oauth_consumer_key="${consumerKey}", oauth_nonce="${nonce}", oauth_signature="${signature}", oauth_signature_method="${signatureMethod}", oauth_timestamp="${timeStamp}", oauth_token="${token}", oauth_version="1.0"`;

function createNonce() {
     let randMe = "";
     let possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
         for( var i=0; i < 5; i++ )
             randMe += possible.charAt(Math.floor(Math.random() * possible.length));
     return btoa(randMe);
 }

function getUserTweet() {
    return axios.get(`${tweet}`, { headers: { 'Authorization': `${DST}` } }).then(function(response){
        console.log(response.data)
        console.log(response.status)
    }).catch(function(error) {
        console.log(error)
    });
}

【问题讨论】:

    标签: javascript api twitter oauth


    【解决方案1】:

    数据基本上是以Twitter API site 中描述的方式编码的您的请求(方法和参数)。
    最终会像

    urlEncode(headers.keys().sort().map(key => `${key}=${headers[key]}`).join("&"))
    

    【讨论】:

    • 是的,我已经阅读了 API 网站,这就是我做到这一点的方式。我相信问题出在我的签名上——我认为您还必须为签名重新创建整个 DST。有点混乱
    • 是的,所有标题都必须按字母顺序再次出现。像headers.keys().sort().map(key =&gt; key+"="+headers[key]).join("&amp;") 这样的东西,所以是的,你的DST 字符串是错误的,因为它有逗号和空格,它应该是一个带有&amp; 的长字符串(然后是urlEncode
    • 我认为 DST 字符串是正确的。按照 Twitter API 规则将字符串“OAuth”(包括末尾的空格)附加到 DST。对于上面列出的 7 个参数的每个键/值对:百分比对键进行编码并将其附加到 DST。将等号字符“=”附加到 DST。将双引号“””附加到 DST。百分比对值进行编码并将其附加到 DST。将双引号“””附加到 DST。如果还有键/值对,则在 DST 后附加一个逗号“,”和一个空格“”。
    • 我的签名不正确,因为您必须基本上将 DST 重建为签名,然后将其包含在原始 DST 中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2010-10-28
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2013-05-18
    • 2019-07-05
    相关资源
    最近更新 更多