Das Plugin schützt dieselben Schutzziele auch in der Shop API. Der Ablauf besteht aus zwei Schritten: Challenge abrufen, lösen und die Lösung mit der geschützten Anfrage mitsenden.
# 1. Challenge abrufen (gleiches Format wie beim Widget)
curl https://shop.example/api/v2/shop/altcha/challenge
# 2. mit einer beliebigen ALTCHA-Client-Library lösen und die Lösung mit der geschützten Anfrage senden
curl -X POST https://shop.example/api/v2/shop/customers/token \
-H 'Content-Type: application/json' \
-H 'X-Altcha-Payload: <base64 payload>' \
-d '{"email":"...","password":"..."}'
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
%sylius.security.api_shop_route%/altcha/challenge |
Liefert eine Challenge im selben Format wie der Storefront-Endpunkt (/altcha/challenge) |
| jede geschützte Operation | - | Nimmt die Lösung als Header X-Altcha-Payload entgegen oder als Feld altcha im JSON-Body (application/json, application/ld+json, Merge-Patch) bzw. im Formular-Body |
Der Challenge-Endpunkt ist öffentlich und auf 30 Aufrufe pro Client und Minute begrenzt, weil jeder Aufruf eine Schlüsselableitung kostet. Ein Channel, für den ALTCHA nicht aktiviert ist, antwortet mit 404.
API-Anfragen werden an ihren Routennamen (sylius_api_*) erkannt, über das Präfix %sylius.security.api_shop_route%. Ein angepasstes API-Präfix erfordert daher keine zusätzliche Konfiguration im Plugin.
Eine abgelehnte Anfrage liefert HTTP 422 (bei Rate-Limit 429) mit einem JSON-Body:
{ "message": "Your message could not be accepted", "reason": "gibberish" }
| Feld | Beschreibung |
|---|---|
message |
Neutrale, lesbare Meldung. Sie wird in der Sprache übersetzt, die der Channel für die Anfrage auflöst, weil die API kein _locale in der URL hat. |
reason |
Stabiler, maschinenlesbarer Code, unabhängig von der Sprache (zum Beispiel disposable_email, gibberish, rate_limited) |
Die möglichen Werte von
reasongehören zur Abwärtskompatibilität des Plugins, in einem Minor-Release können neue hinzukommen. Behandle unbekannte Werte in deinem Client deshalb wie eine allgemeine Ablehnung (siehe Erweiterbarkeit und Kompatibilität).