oauth_signature ungültiger Fehler bei Verwendung der Magento Rest API mit GET-Filtern

7

Es fällt mir schwer, Bestellungen von der Magento REST-API abzurufen, wenn ich die GET-Filter wie z http://localhost/magento/api/rest/orders/?filter[1][attribute]=entity_id&filter[1][gt]=70&page=1&limit=100

Es gibt ein "error":[{"code":401,"message":"oauth_problem=signature_invalid"}]

Wenn ich versuche, denselben API-Endpunkt mit einem REST-Client wie Postman zu erreichen, erhalte ich die gewünschten JSON-Ergebnisse zurück.

Ich vermute, dass die eckigen Klammern in der Filterabfrage ein Problem beim Generieren einer Oauth-Signatur verursachen. Alle Endpunkte ohne GET-Filter funktionieren einwandfrei. Ich verwende das Anforderungsknotenmodul, um die GET-Anforderung mit den oauth-Headern zu erstellen.

Gibt es eine Lösung, um den ungültigen Signaturfehler zu vermeiden?

Srikanth
quelle
Gibt es eine Antwort auf diese Frage oder haben Sie einen Weg gefunden, Filter anzuwenden? Ich stehe auch vor dem gleichen Problem
UmeshR
Das Problem lag im Anforderungsknotenmodul, mit dem ich eine OAuth-Signatur generiert habe. Die URL wurde nicht in eckigen Klammern berücksichtigt. Ich habe den Code im Modul geändert, um eckige Klammern einzufügen. Überprüfen Sie die von Ihnen verwendete OAuth-Signaturgenerierungsmethode.
Srikanth
Das ist direkt nach einiger Zeit, ich habe es gelöst, danke für Ihre Hinweise.
UmeshR
Ich habe das gleiche Problem. Wenn der Querystring eckige Klammern enthält, ist die Signatur ungültig. Wie haben Sie es gelöst? Danke.
Ich habe auch das gleiche Problem. Wie hast du gelöst? Die eckigen Klammern sind korrekt codiert und die Reihenfolge der Querystring-Parameter ist in Ordnung, aber ich erhalte immer noch eine ungültige Signatur.
Gustavo Piucco

Antworten:

3

Haben Sie es geschafft, die Namen und Werte von Parametern zu kodieren?

Ich hatte auch dieses Problem und das hat mir geholfen.

Müssen Sie sicherstellen , dass Ihre Unterschrift Basis String - Parameter sind in alphabetischer Reihenfolge durch Parameternamen

Dies ist, was ich verwende, um Parameter in meiner Signaturbasis zu codieren.

var result = new StringBuilder();
string webUnreservedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";
foreach (char symbol in url)
{
    if (webUnreservedChars.IndexOf(symbol) != -1)
        result.Append(symbol);
    else
        result.Append('%' + ((int)symbol).ToString("X2"));
}
return result.ToString();

Hoffe das hilft :)

Johnny Santos
quelle
Willkommen auf der Magento SE. Danke für deine Antwort. Obwohl es eine Antwort auf eine alte Frage ist, kann es für andere immer noch nützlich sein :)
Julien Lachal
0

Es gibt ein Problem mit dem Anbieter der Magento-Kernfunktionalität / magento / framework / Oauth / Oauth.php.

Sonu Kumar
quelle
0

Der Trick besteht darin, dass Sie die eckigen Klammern in der Signatur-Basiszeichenfolge zweimal konvertieren müssen:

  • [=>% 5B =>% 255B
  • ] =>% 5D =>% 255D
Thomas Steinhäuser
quelle