wir binden Shopware an unser ERP an, dieses hat aufgrund sehr großer Artikel aber Übertragungen, die recht lange dauern, aber nach 10 Minuten immer abgebrochen werden.
Ich konnte das Problem bereits mit hoher Sicherheit auf das API AccessToken zurückführen, da dieses nur 10 Minuten gültig ist. In diesem älteren Thread war die Verlängerung des Tokens auch schon ein Thema, daher bin ich den Infos dort gefolgt. Mittlerweile wird die tatsächliche Gültigkeitsdauer des Tokens an einer anderen Codestelle definiert, aber sonst stimmen die Angaben soweit ich das beurteilen kann.
Ich habe nun testweise die Gültigkeitsdauer des Token von „PT10M“ auf „PT1H“ gestellt, jedoch habe ich in unserem ERP noch immer das gleiche Fehlerbild. Also entweder ist das ablaufende Token nicht das (einzige) Problem, oder meine Änderung greift noch nicht.
Hat da jemand mit mehr Programmierungseinsicht eine Idee zu?
Das Problem tritt immer nach 9,5 Minuten auf, klingt für mich daher sehr nach einer Timeout-Geschichte. Nachforschungen des Hosters im Serverlog hat dann die Webserver Fehlermeldung zum entsprechenden Zeitpunkt ergeben. Daher die Vermutung, dass dies ein Problem der Gültigkeitslänge des AccessTokens ist.
Beim Token generieren bekommt ihr auch einen refresh token dazu, vor dem request sollte geprüft werden ob der token abgelaufen ist - falls ja muss ein neuer mit dem refresh token generiert werden.
Die Laufzeit zu erhöhen ist eine suboptimale Lösung, du weißt ja nicht wie lang in Zukunft die Requests eventuell dauern. Mal vom Sicherheitsaspekt abgesehen.
Danke für deine Antwort, mir ist leider nicht bekannt, wie unser ERP die Tokens genau handhabt, daher kann ich dazu nichts sagen. Wenn ich weiß woher exakt der Fehler kommt, kann ich hier eine entsprechende Anpassung der Software vornehmen lassen, aber bisher kann ich die Ursache eben nicht genau feststellen.
Dass die Laufzeit zu erhöhen eher suboptimal ist, auch vom Sicherheitsaspekt her, ist mir auch klar, deswegen habe ich diese auch nur testweise erhöht.
Aber die eigentliche Eingangsfrage klärt das leider nicht: Wieso werden die API Calls trotz Laufzeiterhöhung nach derselben Zeit abgelehnt wie vor der Erhöhung?
In den PHP Einstellungen des Webserver sind deutlich längere Zeiten zugelassen, die Begrenzung muss also direkt aus der Shopware Software kommen.
Ich würde einfach mal Testweise per Postman etc. einen Token generieren und sehen was im expires_at steht - wenn der Wert sich nicht erhöht kann es sein dass die config irgendwo nicht durchgeht.
Edit:
Und deine Fehlermeldung sieht so aus als ob das ERP den Token selbst verliert/löscht - sonst wäre es eine andere Meldung.
Wenn der Token abgelaufen ist erhältst du folgende Meldung:
"detail": "Access token could not be verified"
Deine Meldung kommt, wenn kein oder kein ganzer Token übergeben wurde
Es scheint als wenn in deinem ERP irgendwie der Token nicht mitgesendet wird. Welches ERP setzt ihr ein?
Das ist schon mal eine sehr interessante Erkenntnis, danke. Wir nutzen Tricoma um Shopware 6 anzubinden.
Edit: Würde die Meldung „SW6 (401) : The JWT string must have two dots“ erscheinen, wenn z.B. das RefreshToken nicht bzw. nicht richtig übergeben wurde?
Wir haben hier zwischenzeitlich auch weitergetestet und wie von aggrosoft vorgeschlagen einen Testcall per Postman gemacht. Dabei sind zwei interessante Dinge bei raus gekommen:
Das Access Token ist nur 600 Sekunden gültig
Es wird kein RefreshToken übergeben. Dies deckt sich mit der aktuellen SW6 Doku zu den Access Tokens.
Um das Problem zu lösen, müsste also entweder der API Call im ERP angepasst werden, oder das Token eine etwas längere Gültigkeit bekommen. Die Einstellung zur globalen Token Gültigkeit hatte ich ja wie im OP geschrieben bereits hochgesetzt, offenbar greift dies aber nicht.
Hat dazu noch jemand eine Idee, wieso diese Änderung zwar in der ApiAuthenticationListener.php gemacht, aber nicht tatsächlich live ist?
Anscheinend wird beim Aufruf der entsprechenden Funktion in ApiAuthenticationListener.php immer der default Wert übergeben, weshalb die vorherige Anpassung nicht live ging. Wir haben nun einfach $aceessTokenInterval neu definiert, um die lifetime des Tokens zu verlängern, bis seitens der Schnittstelle nachgebessert werden kann.
Hat hier jemand neue Erkenntnisse? Ich hab hier auch das Problem in v6.5.7.3 dass der Workflow mit dem RefreshToken nicht hin haut. Bekomme trotzdem den Fehler {"errors":[{"code":"9","status":"401","title":"The resource owner or authorization server denied the request.","detail":"Access token could not be verified"}]}
Es ist zum verzweifel, v.a. weil ich mir zu 99% sicher bin, dass das so wie ich es implementiert habe auch schon funktioniert hat. Oder ich bin noch nie vorher ins Time Limit gelaufen.