Eigener Storefront Controller liefert 403 bei POST-Request

Hallo Zusammen,

Ich arbeite an einem Plugin, welches einen eigenen Storefront-Controller bereitstellt, welcher zukünftig per POST angetriggert werden soll:

/**
 * @RouteScope(scopes={"storefront"})
 * @Route("/oneflow/postback", name="frontend.oneflow.postback", defaults={"csrf_protected"=false, "XmlHttpRequest"=true}, options={"seo"="false"}, methods={"POST", "GET"})
 */
public function postback(Request $request)
{
    $contentType = $request->getContentType();
    $token = $request->query->get('token');

    if ($contentType !== 'json') {
        return new JsonResponse([
            'success' => false,
            'error' => 'Expected Content-Type "application/json"'
        ]);
    }

    if ($token !== self::ACCESS_TOKEN) {
        return new JsonResponse([
            'success' => false,
            'error' => 'Invalid access token'
        ]);        

    try {
        $data = json_decode($request->getContent(), true);

        $result = $this->oneflowPostbackService->processPostbackData($data);

    } catch (\Exception $e) {
        return new JsonResponse([
            'success' => false,
            'error' => $e->getMessage()
        ]);
    }

    return new JsonResponse($result);
}

 

Aktuelles Problem: Rufe ich zum Test die URL www.meinshop.de/oneflow/postback auf, bekomme ich eine korrekte Antwort.
Teste ich eine POST-Anfrage (z.B. über Postman) bekomme ich nur einen 403 Forbidden und der Shop meldet "Die Sitzung ist abgelaufen. Bitte kehren Sie zur letzten Seite zurück neu und versuchen Sie es erneut. "

 

Jemand eine Idee?

Der Storefront Controller soll von außerhalb via POST aufgerufen werden? Ich denke CORS Anfragen sind garnicht möglich. Und SAMEORIGIN Anfragen auch nur mit einem CSRF Token machbar. Für dein Vorhaben wäre die Admin API vllt der richtige Ansatz.

@Moorleiche schrieb:

Der Storefront Controller soll von außerhalb via POST aufgerufen werden? Ich denke CORS Anfragen sind garnicht möglich. Und SAMEORIGIN Anfragen auch nur mit einem CSRF Token machbar. Für dein Vorhaben wäre die Admin API vllt der richtige Ansatz.

Ganz genau. Zukünftig soll der Controller von Außerhalb per POST aufgerufen werden können.Genau genommen geht es hierbei um eine externe Produktion, die bei z.B. Versand der Produkte einen Trigger auslöst. Der Trigger kann auf eine bestimmte URL eingestellt werden und ruft dann diese URL per POST und mit den entsprechenden Produktdaten auf.

Du meinst also, ich müsste einen Admin API Controller erstellen? Aber dafür müsste ich doch entsprechend eine Authentication setzen oder?

Dies wird aber schwierig, da von außerhalb immer nur eine Anfrage mit den Daten kommt.
Um eine korrekte Authentication zu bekommen müsste ich aber immer erst eine Anfrage an /api/oauth/token machen für das Bearer-Token und dann die gewünschte Anfrage an /api/v2/oneflow/postback mit dem Bearer-Token, oder?

Diesen Token kann man widerum nur generieren, wenn man einen gültigen Admin Zugang hat. Aber es gibt auch noch die Storefron API fällt mir gerade ein, der Token kann in der SalesChannel Konfiguration hinterlegt werden. Ich denke dort wird es auch möglich sein CORS Requests zu machen. Aber hier kenne ich mich leider noch zu wenig aus.