Wenn ich an Shopware 6 Schnittstellen programmiere (zum Beispiel bei der Anbindung von ERP-Systemen) verwende ich gerne Postman, um API-Aufrufe zu testen und zu optimieren. Dabei störte mich, dass der Token in der Admin-API nur 10 Minuten gültig ist. Ist das Zeitlimit erreicht, muss man händisch einen neuen Access Token anfordern und zur Verwendung für die weiteren API-Aufrufe auswählen.
„Das muss doch besser gehen“, dachte ich. Ein Auto-Refresh des Tokens wäre schön. Die Suche bei Google und im Shopware-Forum zeigte zwar, dass ich nicht der einzige mit dem Problem war. Eine Lösung fand sich in den Threads aber nicht. Also habe ich mir das näher angesehen.
Schritt 1: Update auf Postman >= 10.6.0
Erstens: Man muss Postman 10.6.0 oder neuer einsetzen. Seit dieser Version unterstützt Postman die automatische Aktualisierung von Tokens für OAuth 2.0. Im Authorization-Tab erscheint eine neue Option „Auto-refresh token“:
Postman 10 nicht unter Ubuntu verfügbar?
Bei mir war diese Option zuerst nicht verfügbar. Es hat sich herausgestellt: Ich habe Postman über Snap installiert, und dort war Postman auf die Version 9.x fixiert.
Als ich Snap mittels „sudo snap switch –channel=v10/stable postman“ mitteilte, dass ich Version 10.x haben möchte, erhielt ich über „sudo snap refresh postman“ die aktuelle Version.
Schritt 2: Token auf Grant Type „Password Credentials“ umstellen
Nun hatte ich zwar die Option zur Verfügung, aber sie war ausgegraut. Wieso das?
Ich habe in Postman – so wie in der Schnittstellen-Programmierung selbst – einen Client Credentials Grant verwendet. Das heißt, ich hatte im Shopware Admin eine Integration angelegt, und die Client ID und das Client Secret von der Schnittstelle in Postman hinterlegt. Als Grant Type hatte ich dort „Client Credentials“ ausgewählt.
Das Problem: bei diesem Grant Type wird die Information „refresh_token“ nicht mitgeschickt. Die benötigt Postman für den OAuth Grant Flow mit automatischem Token-Refresh.
Was man nun machen muss, ist – und das wird in der Shopware-API-Dokumentation schon angedeutet:
- In Postman den Grant Type auf „Password Credentials“ umstellen (das entspricht dem Resource Owner Password Grant Type laut Shopware-Dokumentation)
- Als „Username“ und „Password“ die Credentials eines Admin-Users eingeben
- Als Client ID „administration“ einstellen.
Die Konfiguration sieht dann so aus:
Und siehe da: Wenn man nun noch einmal selbst einen Token abruft, erhält Postman auch die „refresh_token“ Information. Die Einstellung „Auto-refresh token“ kann aktiviert werden, und man muss nicht mehr alle 10 Minuten einen Token abholen.
Viel Spaß beim API-Aufrufen!
Alternativen: Insomnia und Paw
Wer nicht mit Postman arbeiten möchte, kann den Auto-Refresh auch in anderen Tools nutzen:
- Die offizielle Dokumentation gibt Tipps zur Einstellung in Insomnia.
- Fabian Blechschmidt hat beschrieben, wie man das in Paw löst.