Izračunavanje Oath 1.0a potpisa u Typescript/Javascriptu


Pokušavam implementirati generiranje potpisa za OAuth u Typescriptu i imao sam ga kako radi, ali onda sam promijenio nešto sitno (fiksirao sam URI u svojoj metodi i promijenio ga za test) i nisam baš obraćao pažnju i sada je iz nekog razloga pokvareno, ne znam zašto. Sjedim ovdje već dva sata gledajući svoj kod, ali za ljubav Boga, ne mogu ga opet natjerati da radi.

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;
}

Privremeno sam također hardcodirao parametar, kao i vremensku oznaku i nonce kako bih provjerio potpis u odnosu na potpis koji je generirao Postman. Ako kopiram i zalijepim potpis koji je generirao Postman u OAuth zaglavlje i dobijem autorizaciju, dakle, greška mora biti u dijelu potpisa.

Odgovor #1

Naravno, 5 minuta nakon objave vidio sam svoju pogrešku. Potpisni ključ treba biti

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

i ne

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