401 Invalid signature for signature method HMAC-SHA1

361 views
Skip to first unread message

Bernhard Döbler

unread,
May 16, 2012, 5:50:04 PM5/16/12
to immobilienscou...@googlegroups.com
Hallo,

ich habe einen Coldfusion-Code, mit dem ich mich 3 beinig per oAuth bei Twitter einloggen kann.
Der exakt selbe code funktioniert bei Immoscout nicht. Der dritte Schritt schlägt fehl.
Ich erhalte die Meldung, dass meine Signatur ungültig wäre. Womit muss die Anfrage nach einem Access-Token signiert werden? Mit clientsecret& oder mit clientsecret&RequesttokenSecret


Danke und Grüße
Bernhard Döbler

Martin Stricker

unread,
May 16, 2012, 7:03:04 PM5/16/12
to immobilienscou...@googlegroups.com
Wir hatten vor ein paar Monaten ähnliche Probleme, und damals stellte sich heraus, dass der OAuth Secret ("RequesttokenSecret") - im Gegensatz zum Client Secret - von immo bereits URL-enkodiert ausgeliefert wurde - damit rechnen viele OAuth-Bibliotheken nicht, enkodieren erneut und boom: ungültige Signatur.

Vielleicht ist es ja immer noch so.

Bernhard Döbler

unread,
May 18, 2012, 6:13:30 AM5/18/12
to immobilienscou...@googlegroups.com
Hallo Martin,

ich habe mir den offiziellen PHP-SDK-Code angesehen. Dort heißt es

            $sConsKey = rawurlencode($this->_sConsumerSecret).'&'.$oToken->ic_secret;
            $sSignature = urlencode(base64_encode(hash_hmac('sha1',$req->get_signature_base_string(),$sConsKey,true)));

Es werden rawurlencode und urlencode genutzt. So wie ich die PHP-Dokumentation verstehe, ist der Unterschied zw. den Funktionen gerade das Codieren von Plus und Leerzeichen. Der Verzicht auf Slashes und PLUS im Secret könnte somit wohl einiges einfacher machen.


Grüße
Bard

Martin Stricker

unread,
May 18, 2012, 6:43:02 AM5/18/12
to immobilienscou...@googlegroups.com
Hallo Bernhard,

das urlencode (zweite Zeile, $sSignature = ...) erfolgt ja erst nach dem base64_encode und hat mit dem Problem deshalb nichts zu tun (und ist meines Erachtens überflüssig, da bei base64 nur ASCII Buchstaben und Zahlen herauskommen).

Die erste Zeile ($sConsKey = ...) zeigt das Problem: $oToken->ic_secret wird - entgegen der Dokumentation & der OAuth-Konvention - nicht URL-encoded (weil dies offensichtlich bei Immoscout vor Auslieferung bereits geschieht).

Mit Standard-OAuth-Biblioteken gibt es hier dann ein kleines Problem. Entweder man fummelt im Quelltext, oder man URL-dekodiert den Token bevor man ihn an die Bibliothek übergibt.

Grüße,

Martin

Eugen

unread,
Apr 2, 2013, 6:46:33 AM4/2/13
to immobilienscou...@googlegroups.com
Hallo Martin,

wie soll denn die Lösung des Problems an der Stelle aussehen?

Danke im Voraus!
Eugen

Martin Stricker

unread,
Apr 4, 2013, 1:03:59 PM4/4/13
to immobilienscou...@googlegroups.com
Hallo Eugen,

das kommt darauf an, worin genau das Problem liegt. Ich habe seit Monaten nicht mehr mit der Immoscout-API gearbeitet, insofern weiß ich nicht, ob der OAuth Secret immer noch bereits enkodiert ankommt. In unserem Fall jedenfalls haben wir damals das Verhalten der Immocaster-Bibliothek in der von uns verwendeten (OAuthSimple.php) imitiert:

In der Funktion _generateSignature():

    $secretKey = rawurlencode($this->_secrets['shared_secret']) . "&" . $this->_secrets['oauth_secret'];

Mehr kann ich dazu leider nicht (mehr) sagen. Vielleicht weiß ja jemand anders Bescheid?
Reply all
Reply to author
Forward
0 new messages