在Typescript / Javascript中计算Oath 1.0a签名

时间:2017-11-18 16:43:19

标签: javascript typescript oauth hmacsha1

我正在尝试在Typescript中实现oauth的签名生成并让它工作,但后来我改变了一些小的东西(我在我的方法中硬编码了URI并将其更改为测试)并且没有真正支付注意,现在它已经因为某些原因而被打破,我不知道。我坐在这里两个小时盯着我的代码但是为了上帝的爱,我无法让它重新开始工作。

calculateSignatur(URI: string, nonce: string, timestamp: number): string{
    let rawURL: string = "GET&" + encodeURIComponent(URI) + "&";
    let parameterString: string = "exact=false" + 
                                    "&oauth_consumer_key=" + this.appToken + 
                                    "&oauth_nonce=" + nonce + 
                                    "&oauth_signature_method=" + this.oauth_signature_method + 
                                    "&oauth_timestamp=" + 1511003512399 + 
                                    "&oauth_token=" + this.accessToken + 
                                    "&oauth_version=" + this.oauth_version + 
                                    "&search=Black";

    let signingString = rawURL + encodeURIComponent(parameterString);

    let signingKey = encodeURIComponent(this.accessToken) + "&" + encodeURIComponent(this.accessTokenSecret);
    let signatur: string = CryptoJS.HmacSHA1(signingString, signingKey).toString(CryptoJS.enc.Base64);
    console.log("Signatur: " + signatur)
    return signatur;
}

我现在硬编码参数以及时间戳和nonce来检查签名与邮递员生成的签名。如果我将邮递员生成的签名复制并粘贴到OAuth标头中并获得授权。所以错误必须在签名部分。

1 个答案:

答案 0 :(得分:1)

当然,发布后5分钟我看到了我的错误。 sginingkey需要

let signingKey = encodeURIComponent(this.appSecret) + "&" + encodeURIComponent(this.accessTokenSecret);

而不是

let signingKey = encodeURIComponent(this.accessToken) + "&" + encodeURIComponent(this.accessTokenSecret);