REST API meldet 401 - unauthorized trotz korrektem Login

Thema wurde von jan_krause, 18. August 2016 erstellt.

  1. jan_krause

    jan_krause Mitglied

    Registriert seit:
    29. Juli 2016
    Beiträge:
    10
    Danke erhalten:
    5
    #1 jan_krause, 18. August 2016
    Zuletzt bearbeitet: 18. August 2016
    Hallo,

    ich habe jetzt schon mehrere GX3 Shops, bei denen der Zugriff auf die REST API nicht funktioniert.
    Als Fehler kommt 401 unauthorized und zwar nicht die Meldung "invalid credentials", sondern einfach nur "Unauthorized", als ob das Login im Authorization Header gar nicht bei Gambio ankommt.

    So sieht ein Beispiel Request aus, der auch bei meinem Testshop und diversen anderen GX3 Shops funktioniert:

    GET https://....de/api.php/v2/orders?page=1&per_page=50&fields=id,purchaseDate&sort=-id HTTP/1.1
    Accept: application/json
    Authorization: Basic aW5...
    User-Agent: BillbeeService/1.0
    Accept-Encoding: gzip, deflate
    Connection: Keep-Alive

    Und der Response:

    HTTP/1.1 401 Unauthorized
    Date: Thu, 18 Aug 2016 18:41:31 GMT
    Server: Apache/2.2.31 (Unix)
    X-Powered-By: PHP/5.6.22
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    Pragma: no-cache
    Www-Authenticate: Basic realm="Gambio GX2 APIv2 Login"
    Vary: Accept-Encoding
    Keep-Alive: timeout=3, max=100
    Connection: Keep-Alive
    Content-Type: text/html; charset=utf-8
    Content-Length: 195

    {"code":401,"status":"error","message":"Unauthorized","request":{"method":"GET","url":"https:\/\/....de","path":"\/api.php\/v2\/orders","uri":{"root":"\/api.php","resource":"\/v2\/orders"}}}


    Im Browser dasselbe Phänomen.
    Woran könnte das liegen?

    Edit: Wie greift Gambio denn auf den Authorization Header zu?
    Könnte das hier eine Lösung sein? http://stackoverflow.com/questions/...-is-missing-authorization-header-in-symfony-2

    Viele Grüße,
    Jan
     
  2. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    18.737
    Danke erhalten:
    7.309
    Danke vergeben:
    2.208
    Der Auth Token denn der Webserver empfängt muss dieser an PHP durchreichen. Wenn PHP als Apache Modul läuft geht das quasi ohne Eingriff. Bei PHP per CGI am Apachen oder anderen Kombinationen muss man da oft nachhelfen...
     
  3. jan_krause

    jan_krause Mitglied

    Registriert seit:
    29. Juli 2016
    Beiträge:
    10
    Danke erhalten:
    5
    Alles klar, danke - habs herausgefunden:

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
    </IfModule>
     
  4. Gambionike

    Gambionike Erfahrener Benutzer

    Registriert seit:
    17. Juni 2011
    Beiträge:
    237
    Danke erhalten:
    16
    Danke vergeben:
    67
    Hallo Wilken, hallo Jan,

    wir haben genau das gleiche Problem. Wo muss der Code, den du, Jan, da schreibst, eingefügt werden? Wäre toll, wenn du das mal eben rückmelden könntest.

    Vielen Dank!
     
  5. jan_krause

    jan_krause Mitglied

    Registriert seit:
    29. Juli 2016
    Beiträge:
    10
    Danke erhalten:
    5
    Hallo,

    das muss in einer Datei .htaccess im Gambio Verzeichnis stehen.
    Ich würde die Zeile noch ein wenig modifizieren:

    RewriteRule ^(.*)api.php - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    So wird die Regelverarbeitung nicht wie im obigen Beispiel beendet und wirkt nur auf die API Route, was je nach Reihenfolge der Regeln zu weiteren Problemen führen kann.

    Wenn du eine bestehende .htaccess hast, solltest du das nicht selber machen, da man sich mit Änderungen in dieser Datei ziemlich leicht ins Knie schießen kann :)

    Viele Grüße, Jan
     
  6. Gambionike

    Gambionike Erfahrener Benutzer

    Registriert seit:
    17. Juni 2011
    Beiträge:
    237
    Danke erhalten:
    16
    Danke vergeben:
    67
    Hallo Jan, das ist ganz lieb von dir, vielen Dank. Wir werden das gleich mal ausprobieren.
     
  7. Gambionike

    Gambionike Erfahrener Benutzer

    Registriert seit:
    17. Juni 2011
    Beiträge:
    237
    Danke erhalten:
    16
    Danke vergeben:
    67
    Hallo Jan, vielen herzlichen Dank, es hat genau so hingehauen!!!
     
  8. peter_essletzbichler

    peter_essletzbichler Neues Mitglied

    Registriert seit:
    13. April 2017
    Beiträge:
    2
    Danke erhalten:
    0
    hallo
    ich habe das selbe problem
    jedoch hab ich im hauptverzeichnis keine datei mit .htaccess
    welche datei muss man editieren ?
    danke
     
  9. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    18.737
    Danke erhalten:
    7.309
    Danke vergeben:
    2.208
    Was nicht ist, kann man ja anlegen. Kopier dir idealerweise die Datei aus gm/seo_boost_an ins Hauptverzeichnis, füge die Zeile dort unter RewriteEngine on ein.
     
  10. peter_essletzbichler

    peter_essletzbichler Neues Mitglied

    Registriert seit:
    13. April 2017
    Beiträge:
    2
    Danke erhalten:
    0
    danke
    hab das gemacht - bekomme aber immer noch das
    wenn ich versuche artikel in den shop zu senden

    {"code":401,"status":"error","message":"Unauthorized","request":{"method":"POST","url":"http:\/\/www.pse-gmbh.at","path":"\/gambio\/api.php\/v2\/products","uri":{"root":"\/gambio\/api.php","resource":"\/v2\/products"}}}

    beim aufruf von
    http://www.pse-gmbh.at/gambio/api.php/v2
    kommt eine Login anforderung
    dort kann ich mich aber nicht mit dem Shopadmin einloggen ?
     
  11. Wilken (Gambio)

    Wilken (Gambio) Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    18.737
    Danke erhalten:
    7.309
    Danke vergeben:
    2.208
    Wenn es korrekt funktioniert, sollte genau das funktionieren. Wenn das nicht funktioniert, gibt der Webserver die Anmeldedaten nicht an PHP weiter, das ist halt ein Serverkonfigurationsmangel und "Hosterland". Der htaccess Schachzug kann das Problem in diversen Fällen lösen, aber nicht für jede mögliche Fehlkonstellation beim Hoster.

    Wenn damit also nichts geht: Hoster ansprechen. Die Anforderung ist: Authentifzierungsdaten für HTTP-Basic-Auth müssen an PHP durchgereicht werden.

    Hier zeigen die PHP Entwickler ein Beispiel:
    http://php.net/manual/de/features.http-auth.php
     
  12. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    17. August 2016
    Beiträge:
    120
    Danke erhalten:
    22
    Danke vergeben:
    17
    @peter_essletzbichler hast du mal in der Cache nachgeguckt?

    Verklemmte Cache-Rückstände prüfen

    Wechselt mit einem FTP-Programm im Stammverzeichnis eures Shops in den Unterordner "cache"
    Prüft ob sich dort eine Datei befindet die wie folgt vom Dateiname beginnt:
    Code:
    gxapi_v2_sessions.....
    
    der Code dahinter variiert bei jeder Shopinstallation und zu jedem Anlagezeitpunkt, ist aber auch irrelevant was da steht.

    - Prüft ob die Datei 0 Byte Datei-Größe hat.
    - Verschiebt die Datei auf euren Computer oder in ein anderes Verzeichnis
    - Sollte das Problem behoben sein, könnt ihr die Datei vom FTP-Server entfernen, eine Sicherungskopie für alle Fälle solltet ihr aber behalten, man weiß ja nie :D


    Einige Leute die mit unserer Warenwirtschaft und der Shopschnittstelle Probleme hatten konnten dank Hilfe der Gambio-Techniker herausfinden das eine 0-Byte Datei geklemmt hat und die Authorisierung nicht erlaubte.
    Vielleicht hast du das Problem ja auch bei dir?
     
  13. missL

    missL Erfahrener Benutzer

    Registriert seit:
    14. Juni 2012
    Beiträge:
    71
    Danke erhalten:
    0
    Danke vergeben:
    12
    Jan, auf der Billbee Seite schreibt ihr "direkt unter der Zeile "RewriteEngine on", aber nach einer eventuell gesetzten RewriteBase " einfügen, ich habe es mit beiden Varianten versucht und es klappt einfach nicht. Hier mal ein Auszug der Datei, vielleicht siehst du ja die Lösung auf Anhieb, ich bin am Verzweifeln!

    <IfModule mod_rewrite.c>

    <IfModule mod_env.c>
    SetEnv gambio_mod_rewrite_working 1
    </IfModule>

    <IfModule !mod_env.c>
    <IfModule mod_setenvif.c>
    SetEnvIf ENV ^(.*)$ gambio_mod_rewrite_working=1
    </IfModule>
    </IfModule>



    ##some Hosters like 1&1 need the following line to be enabled, else all the following will fail all the time

    RewriteBase /

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^(.*)api.php - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    </IfModule>
     
  14. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    17. August 2016
    Beiträge:
    120
    Danke erhalten:
    22
    Danke vergeben:
    17
    also sollte dass alles sein, dann fehlt am Ende ein </IfModule>
    ich zähle 5 x <IfModule... aber nur 4x </IfModule>
     
  15. missL

    missL Erfahrener Benutzer

    Registriert seit:
    14. Juni 2012
    Beiträge:
    71
    Danke erhalten:
    0
    Danke vergeben:
    12
    wenn ich noch eines hinzufüge kommt nun folgende Fehlermeldung:
    "Anfrage fehlgeschlagen: InternalServerError Internal Server Error"

    :(
     
  16. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Welche Shopversion hast Du?
     
  17. missL

    missL Erfahrener Benutzer

    Registriert seit:
    14. Juni 2012
    Beiträge:
    71
    Danke erhalten:
    0
    Danke vergeben:
    12
    v3.12.0.4
     
  18. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Da sieht der Code bei mir schon mal so aus:

    Code:
    <IfModule mod_rewrite.c>
    
        <IfModule mod_env.c>
            SetEnv gambio_mod_rewrite_working 1
        </IfModule>
    
        <IfModule !mod_env.c>
            <IfModule mod_setenvif.c>
                SetEnvIf ENV ^(.*)$ gambio_mod_rewrite_working=1
            </IfModule>
        </IfModule>
    
        RewriteEngine on
    
        ##some Hosters like 1&1 need the following line to be enabled, else all the following will fail all the time
    
        RewriteBase /
    ....
    füge diese Zeile :

    Code:
    RewriteRule ^(.*)api.php - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
    unter dem
    RewriteBase /
    ein
    so dass das so aussieht:

    Code:
    <IfModule mod_rewrite.c>
    
        <IfModule mod_env.c>
            SetEnv gambio_mod_rewrite_working 1
        </IfModule>
    
        <IfModule !mod_env.c>
            <IfModule mod_setenvif.c>
                SetEnvIf ENV ^(.*)$ gambio_mod_rewrite_working=1
            </IfModule>
        </IfModule>
    
        RewriteEngine on
    
        ##some Hosters like 1&1 need the following line to be enabled, else all the following will fail all the time
    
        RewriteBase /
    
    RewriteRule ^(.*)api.php - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    ....
     
  19. missL

    missL Erfahrener Benutzer

    Registriert seit:
    14. Juni 2012
    Beiträge:
    71
    Danke erhalten:
    0
    Danke vergeben:
    12
    Dann erscheint wieder folgende Fehlermeldung in Billbee
    "Anfrage fehlgeschlagen: InternalServerError Internal Server Error"
     
  20. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    Hast Du denn den Rest von Billbee installiert, oder nur die eine Zeile eingefügt?
    Wie sieht denn die Anleitung aus?