API Aufruf per BasicAuth statt Digest

Hallo, der Support konnte mir leider nicht weiterhelfen, deswegen stelle ich meine Frage hier: Wir müssen unsere Shopware Instanz von außen mit Daten versorgen. Dazu verwenden wir die vorhandenen APIs. Wir haben dabei nur ein Problem: Die API ist im Zugriff mit der Methode Digest geschützt. Wir würden gern BasicAuth verwenden. Hintergrund ist, dass das aufrufende System ein Java System ist und im eingesetzten CXF Framework Digest nicht funktioniert. Wir haben eine Lösung gefunden für die wir allerdings die Sourcen von Shopware anpassen müssten. In der Datei /engine/Shopware/Plugins/RestApi/bootstrap.php müssten wir folgende Anpassung vornehmen: $adapter = new Zend_Auth_Adapter_Http(array( ‘accept_schemes’ => ‘digest basic’, ‘realm’ => ‘Shopware REST-API’, ‘digest_domains’ => ‘/’, ‘nonce_timeout’ => 3600, ‘’ )); (Erweiterung accept_schemes um basic). D.h. es ist eigentlich schon alles da, man kann es nur nicht konfigurieren, was ich etwas merkwürdig finde. Frage: Haben wir hier etwas übersehen? Kann man das einfacher/anders lösen? Unsere Lösung verhindert zukünftige Updates und ist für mich daher nicht akzeptabel. Danke, Karsten

Hi, grundsätzlich passiert das im Standard in diesem Plugin: \Shopware_Plugins_Backend_Auth_Bootstrap Dort wird mit dem Event „Enlight_Bootstrap_InitResource_Auth“ die Standard-Auth-Ressource initialisiert. Theoretisch kannst du dich einfach vorher registrieren und das austauschen. Weil es sich hier um die Authentifizierung handelt, sind solche Anpassungen natürlich mit Vorsicht vorzunehmen - möglich wäre es so aber. Schönen Gruß, Daniel

Hi, Danke für die Antwort. Wir werden das ausprobieren. Karsten

Zu Testzwecken wäre ich ebenfalls daran interessiert, gibt hier zu eine Lösung?
Ich fänd es auch spannend für interne Tests die ganze Auth. der API deaktivieren zu können.
Im Auth Plugin habe ich dafür alles mögliche probiert, nur leider ohne Erfolg …

Schöne Grüße,
Niklas

Hallo, gibt es hier inzwischen eine Möglichkeit,
das ganze über die Konfiguration anzupassen, ohne dass man die Klassen umbauen muss?

Wir haben die Situation, dass eine externe Firma mit SAP (B1if) über die REST-API auf Shopware 5 zugreifen muss, was aber nicht funktioniert, weil B1if die Authentifizierungsmöglichkeit „Basic Authentication“ benötigt.
Beim Zugriff erhält die Firma die Fehlermeldung: {„success“:false,„message“:„Invalid or missing auth“}
(Den gleichen Fehler erhält man auch, wenn man z. B. über RESTClient unter Firefox mit der Option „Authentication Basic Authentication“ zugreifen will.)

Eine Anpassung der Server-Konfiguration entsprechend 
http://community.shopware.com/api-configuration
hat nicht weitergeholfen.

So ein „Basic Authentication“-SAP-Zugriff (über B1if) müsste doch etwas sein, was öfters benötigt wird?

Viele Grüße
Siegi

Nein geht bisher nicht. Aber es gibt inzwischen ein Ticket dazu Shopware Issuetracker

Voten und evtl. eure Anforderungen dazu posten. z.B. der Vorschlag von @TeichDatensysteme‍ die Authentifizierung zu Testzwecken ganz deaktivieren zu können.

Danke @t2oh4e‍ für das Ticket, klingt sehr gut!

I apologise for writing in English but I am better at reading German than writing.

I also ran into the issue regarding the basic authentication but I have managed to create a working solution. This however will require adapting 2 files.

 

First change shopware/engine/Shopware/Plugins/Default/Core/RestApi/Bootstrap.php

In function “onInitResourceAuth” change the following lines:

‘accept_schemes’ => ‘digest’ to ‘accecpt_schemes’ => ‘basic’

$adapter->setDigestresolver(  to $adapter->setBasicResolver(

 

Now you need to change the file shopware/engine/Shopware/Plugins/Default/Core/RestApi/Components/StaticResolver.php

in function “resolve” change the following line:

return md5($username . ‘:’ . $realm . ‘:’ $apiKey); to return $apiKey;

 

Now you can use basic authentication with the user and the apikey as the password.

I hope this will be useful for other people until Shopware Issuetracker has been resolved.

Cheers, Alexander

1 „Gefällt mir“