API-Schlüssel
Die API-Schlüssel-Seite eines KI-Produkts, wie in den Konsolen von OpenAI und Anthropic. Schlüssel mit eingeschränkten Berechtigungen und Ablaufdatum erstellen, das Secret einmal sehen mit einem Kopieren, das sich bestätigt, mit Rückgängig widerrufen, direkt umbenennen, mit Übergangsfrist rotieren und die Nutzung pro Schlüssel sehen.
OpenAI, Anthropic und Vercel liefern alle dieselbe API-Schlüssel-Seite: eine Liste von Schlüsseln, von denen du nur das Ende siehst, ein Dialog für einen neuen und eine einzige Gelegenheit, das Secret zu kopieren. API keys ist diese Seite als ein Block, der in jeden Settings-Bereich passt. Er kümmert sich um die Stellen, an denen es schiefgeht: Secrets, die verloren gehen, weil ein Dialog geschlossen wurde, versehentlich widerrufene Schlüssel und Listen, die springen, wenn etwas verschwindet.
Jede Zeile zeigt den Namen des Schlüssels, das maskierte Secret wie hx_live_…a3F9, seine Berechtigungen, das Projekt, wann er erstellt und wann er zuletzt verwendet wurde, oder Never used. Schlüssel, die innerhalb einer Woche ablaufen, bekommen ein Warn-Badge, abgelaufene sagen das ausdrücklich. Übergib usage, und auf breiteren Bildschirmen steht neben dem Schlüssel ein kleines Diagramm der täglichen Anfragen.
Create key öffnet einen Dialog mit Name, Projekt, Berechtigungen (alle, nur lesen oder beschränkt auf die angehakten Ressourcen) und einem Ablauf von 30 Tagen, 90 Tagen, nie oder einem gewählten Datum. Danach wird derselbe Dialog zur Enthüllung: der vollständige Schlüssel in einer Monospace-Box, ein Copy-Button, der sich mit einem Häkchen bestätigt, und eine Checkbox, die abgehakt sein muss, damit Done funktioniert. Wer vor dem Kopieren schließen will, behält den Dialog offen, mit Warnung und einem Button „Close anyway“. Auch der Tab fragt vor dem Schließen nach.
Das Widerrufen fragt zuerst nach und nennt den Schlüssel. Dann klappt die Zeile weg, und ein Toast bietet fünf Sekunden lang Undo an; onRevoke läuft erst, wenn dieses Fenster schließt, sodass Undo nichts von deinem Server braucht. Verlässt man die Seite oder erstellt einen weiteren Schlüssel, werden wartende Widerrufe sofort gesendet. Rotate key tauscht ein neues Secret ein und kann das alte eine Stunde, einen Tag oder eine Woche weiter funktionieren lassen. Direkt umbenennen mit F2 oder Doppelklick, Enter zum Speichern und Escape zum Abbrechen.
Die Pro-Registry zu components.json hinzufügen
components.json Token hinzufügen
Erstelle auf deiner Kontoseite einen Token und trage ihn in
.env.localalsHEXTAUI_PRO_TOKENein.Den Block hinzufügen
pnpm dlx shadcn@latest add @hextaui-pro/api-keys
An deine API anbinden
ApiKeySettings zeigt die Schlüssel, die du übergibst, und ruft dich auf, sie zu erstellen, zu widerrufen und umzubenennen. Wirf aus einem beliebigen Callback einen Fehler, und die Person sieht den Grund, ihre Eingabe bleibt erhalten. Zeige ApiKeySettingsSkeleton, während die Liste lädt.
Schlüssel auf deinem Server erzeugen
generateApiKey nutzt crypto.getRandomValues und funktioniert deshalb in Node, Edge-Runtimes und Workers. Speichere einen Hash und die letzten vier Zeichen und sende das Secret nur einmal zurück.
Rotation, eigene Scopes und kein Undo
Übergib onRotate, um Rotate key mit einer Übergangsfrist für das alte Secret hinzuzufügen. Setze undoTimeout auf 0, um im Moment der Bestätigung zu widerrufen, und übergib resources, prefix und snippet passend zu deiner API.
Aufbau
Die Teile, die du zusammensetzt, von außen nach innen.
| Part | Beschreibung |
|---|---|
ApiKeySettings | Die Liste, ihr Header mit Create key, der Hinweis zum Limit, der Leerzustand und alle Dialoge. |
ApiKeySettingsSkeleton | Ein Lade-Platzhalter in der Form der Liste, für die skeleton-Prop von SettingsSection. |
generateApiKey | Erzeugt einen zufälligen Schlüssel mit Präfix aus crypto.getRandomValues. |
keyHint | Die letzten Zeichen eines Secrets, zum Speichern und Anzeigen als maskierter Schlüssel. |
ApiKeySettings
Akzeptiert auch alle div-Props.
| Prop | Typ | Standard |
|---|---|---|
keys{ id, name, hint, permission, resources?, project?, createdAt, lastUsedAt?, expiresAt?, usage? }. Datumswerte akzeptieren ein Date, einen ISO-String oder einen Timestamp. usage sind Anfragen pro Tag, die ältesten zuerst. | ApiKey[] | – |
onCreateErzeuge den Schlüssel und gib ihn mit seinem Secret zurück, das einmal angezeigt wird. Wirf einen Fehler, um die Meldung im Dialog zu zeigen. | (input: ApiKeyInput) => Promise<{ key, secret }> | – |
onRevokeWiderruft den Schlüssel. Läuft nach dem Undo-Fenster. Bei einem Fehler kommt der Schlüssel mit Try again zurück. | (key) => void | Promise<void> | – |
onRenameFügt Umbenennen, F2 und Doppelklick hinzu. Der neue Name erscheint sofort und wird zurückgesetzt, wenn das einen Fehler wirft. | (key, name) => void | Promise<void> | – |
onRotateFügt Rotate key hinzu. expireOldIn gibt an, wie viele Stunden das alte Secret weiter funktioniert, 0 für sofort. | (key, { expireOldIn }) => Promise<{ key, secret }> | – |
limitDie maximal erlaubte Anzahl Schlüssel. Am Limit wird Create key deaktiviert und der Hinweis sagt warum. | number | – |
resourcesWas ein eingeschränkter Schlüssel nutzen darf. Standardmäßig models, responses, embeddings, files, agents und usage. | { value, label, description? }[] | – |
projectsFügt dem Erstellen-Dialog einen Projekt-Picker hinzu und zeigt das Projekt an jedem Schlüssel. | { value, label }[] | – |
prefixWird in maskierten Schlüsseln vor den Hinweis gesetzt, es sei denn, ein Schlüssel hat ein eigenes Präfix. | string | "hx_live_" |
snippetDer im Leerzustand gezeigte Befehl, mit einem Copy-Button. | string | – |
undoTimeoutWie lange nach dem Widerrufen Undo angeboten wird, in ms. 0 widerruft sofort nach der Bestätigung. | number | 5000 |
expiringSoonTage vor Ablauf, ab denen ein Schlüssel das Warn-Badge bekommt. | number | 7 |
nowLegt die für relative Daten verwendete Zeit fest, für Tests und Screenshots. | Date | – |
| Prop | Typ | Standard |
|---|---|---|
rowsWie viele Platzhalter-Schlüssel angezeigt werden. | number | 3 |
generateApiKey
Gibt das Präfix plus zufällige Buchstaben und Ziffern zurück.
| Prop | Typ | Standard |
|---|---|---|
prefixWird an den Anfang des Schlüssels gesetzt. | string | "hx_live_" |
lengthZufällige Zeichen nach dem Präfix, von 8 bis 256. | number | 40 |
| Taste | Aktion |
|---|---|
| F2 | Benennt den Schlüssel um, dessen Zeile den Fokus hat. |
| Enter | Beim Umbenennen wird der Name gespeichert. Im Erstellen-Dialog wird der Schlüssel erstellt. |
| Escape | Beim Umbenennen bleibt der alte Name. In der Enthüllung wird einmal gewarnt, wenn der Schlüssel nicht kopiert wurde. |
| Tab | Wechselt durch die Aktionen jedes Schlüssels, dann durch die Dialogfelder und Buttons. |
- Wird ein Schlüssel erstellt, springt der Fokus zu Copy, und eine Statusmeldung sagt, dass er jetzt kopiert werden muss, weil er nicht noch einmal angezeigt wird.
- Bestätigungen nennen den Schlüssel und sein maskiertes Secret, und der Fokus beginnt auf Cancel.
- Nach dem Widerrufen springt der Fokus zum nächsten Schlüssel, zum vorherigen oder zu Create key. Nach Undo kehrt er zum wiederhergestellten Schlüssel zurück. Nach dem Umbenennen kehrt er zu den Aktionen des Schlüssels zurück.
- Eingeschränkte Badges nennen ihre Ressourcen, das Nutzungsdiagramm wird als Summe vorgelesen, und Umbenennen und Wiederherstellen werden angesagt.
- Bei reduzierter Bewegung erscheinen und verschwinden Zeilen ohne Einklappen.
Gebaut mit
Die kostenlosen HextaUI-Komponenten, aus denen API keys besteht. Jede lässt sich einzeln installieren.
Code
4 Dateien, hinzugefügt zu components/blocks/api-keys.