Auf dem Laufzettel eines Besuchers stehen die Foto-ID und der Loeschcode.
Ob die beiden zusammengehoeren, sagt dir diese Schnittstelle: die Antwort ist
{"valid":true} oder {"valid":false}, mehr nicht.
Sie antwortet unter http://fotofix/api/pruefen im Saal und unter
fotofix.classic-computing.de/api/pruefen im Internet.
Ueber HTTPS darf der Code selbst in der Anfrage stehen:
GET https://fotofix.classic-computing.de/api/pruefen?id=MUSTER&code=PQ4M7XKD
{"valid":true}
Ueber Port 80 - im Saal, und fuer jede Maschine ohne TLS - bleibt der Code vom Draht fern. Hol dir eine Nonce, hashe den Code, hashe noch einmal mit der Nonce davor, und schicke das Ergebnis:
GET /api/pruefen?id=MUSTER
{"nonce":"5f8a2c0d9b1e47f6a3d0c8b7e6f5a4d3"}
proof = sha256hex( nonce + sha256hex(code) )
GET /api/pruefen?id=MUSTER&nonce=5f8a...&proof=<64 Hexziffern>
{"valid":true}
Beide Hashes sind SHA-256 ueber ASCII, als Hexstring in Kleinbuchstaben; der Code steht dabei so im Hash, wie er auf dem Zettel steht: Grossbuchstaben und Ziffern. Eine Nonce gilt zwei Minuten, fuer genau eine Antwort, und nur fuer die Foto-ID, fuer die sie ausgegeben wurde.
Als Shell-Rezept:
BASE=http://fotofix.classic-computing.de NONCE=$(curl -s "$BASE/api/pruefen?id=MUSTER" | sed 's/.*"nonce":"//;s/".*//') HASH=$(printf %s PQ4M7XKD | sha256sum | cut -d' ' -f1) PROOF=$(printf %s "$NONCE$HASH" | sha256sum | cut -d' ' -f1) curl -s "$BASE/api/pruefen?id=MUSTER&nonce=$NONCE&proof=$PROOF"
Das Foto MUSTER hat den veroeffentlichten Loeschcode
PQ4M7XKD - an dem Paar kannst du deinen Client pruefen, und
loeschen laesst sich das Musterfoto damit nicht.
200 {"valid":true} Foto-ID und Code gehoeren zusammen
200 {"valid":false} falscher Code, unbekannte Foto-ID, geloeschtes Foto,
oder eine verbrauchte oder abgelaufene Nonce
400 {"error":"..."} ID nicht sechs Zeichen A-HJ-NP-Z2-9, oder nonce/proof
unvollstaendig
403 {"error":"..."} der Code selbst ueber Port 80 - nimm Nonce und Proof
429 {"error":"..."} zu viele falsche Antworten fuer eine Foto-ID; warte
eine Minute
The same in English: the API answers whether a photo id and a deletion
code belong together. Over HTTPS send the code itself
(?id=...&code=...); over plain HTTP fetch a nonce
(?id=...), then send
?id=...&nonce=...&proof=sha256hex(nonce +
sha256hex(code)), lowercase hex over ASCII. A nonce lasts two minutes,
answers once, and is bound to its id. MUSTER with code
PQ4M7XKD is the published pair to test against.