Gespeichert wird nur der Hash eines Tokens. Der Klartext existiert genau einmal — beim Anlegen, auf dem Bildschirm. Ein Token ist ein Passwort; es gibt keinen Grund, es zurueckzulesen, und jeden Grund, es nicht zu koennen. Drei Rechte, und keines schliesst ein anderes ein. Ein Dienst, der nur meldet "hier ist etwas Neues", braucht den Bestand nicht zu sehen — genau das ist der haeufigste Fall und der, bei dem ein mitgelesener Token am wenigsten anrichtet. Der sichtbare Anfang "planer_..." ist Absicht: Wer so einen Wert versehentlich in ein oeffentliches Verzeichnis schiebt, soll ihn beim Durchsehen erkennen. 30 Tests. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
28 lines
857 B
SQL
28 lines
857 B
SQL
-- CreateTable
|
|
CREATE TABLE "api_token" (
|
|
"id" TEXT NOT NULL,
|
|
"benutzerId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"praefix" TEXT NOT NULL,
|
|
"hash" TEXT NOT NULL,
|
|
"rechte" TEXT NOT NULL,
|
|
"gueltigBis" TIMESTAMP(3),
|
|
"letzteNutzung" TIMESTAMP(3),
|
|
"widerrufenAm" TIMESTAMP(3),
|
|
"erstelltAm" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "api_token_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "api_token_praefix_key" ON "api_token"("praefix");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "api_token_hash_key" ON "api_token"("hash");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "api_token_benutzerId_idx" ON "api_token"("benutzerId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "api_token" ADD CONSTRAINT "api_token_benutzerId_fkey" FOREIGN KEY ("benutzerId") REFERENCES "benutzer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|