API-Referenz
Alle REST-Endpoints des PluriKey Servers. Base-URL: http://localhost:8200 (Server) oder http://localhost:8210 (Desktop).
/auth/login, /auth/init und /vaults erfordern einen Bearer Token im Authorization Header.
Login
POST /api/ext/auth/login
Oeffnet einen Vault mit der Passphrase. Gibt ein Session-Token zurueck.
Request
POST /api/ext/auth/login
Content-Type: application/json
{
"vault_name": "stefan",
"passphrase": "meine-sichere-passphrase"
}
Response (200)
{
"token": "eyJ0eXAiOiJKV1Q...",
"vault_name": "stefan"
}
Fehler
| Code | Bedeutung |
|---|---|
| 401 | Falsche Passphrase |
| 404 | Vault existiert nicht |
Token Refresh
POST /api/ext/auth/refresh
Verlaengert die aktuelle Session. Unterliegt der max_session_secs Obergrenze.
Request
POST /api/ext/auth/refresh
Authorization: Bearer eyJ0eXAiOiJKV1Q...
Response (200)
{
"token": "eyJ0eXAiOiJKV1Q...",
"remaining_secs": 28800
}
Logout
POST /api/ext/auth/logout
Beendet die Session, loescht die age Identity aus dem RAM.
Vault erstellen
POST /api/ext/auth/init
Erstellt einen neuen, leeren Vault mit der angegebenen Passphrase.
POST /api/ext/auth/init
Content-Type: application/json
{
"vault_name": "arbeit",
"passphrase": "neue-sichere-passphrase"
}
Response (201)
{
"vault_name": "arbeit",
"message": "Vault created"
}
Vaults auflisten
GET /api/ext/vaults
Listet alle verfuegbaren Vault-Namen auf. Kein Token erforderlich.
GET /api/ext/vaults
Response (200)
{
"vaults": ["stefan", "arbeit", "shared"]
}
Eintraege abrufen
GET /api/ext/entries
Gibt alle Eintraege des geoeffneten Vaults zurueck.
GET /api/ext/entries
Authorization: Bearer eyJ0eXAiOiJKV1Q...
Response (200)
[
{
"id": "a1b2c3d4",
"display_name": "GitHub",
"kvs": [
{ "key": "Title", "value": "GitHub Account", "masked": false },
{ "key": "URL", "value": "https://github.com/login", "masked": false },
{ "key": "UserName", "value": "stlas", "masked": false },
{ "key": "Password", "value": "********", "masked": true },
{ "key": "ShieldType", "value": "Login", "masked": false }
],
"body": ""
}
]
CRUD Operationen
| Methode | Endpoint | Beschreibung |
|---|---|---|
| GET | /api/ext/entries/:id | Einzelnen Eintrag abrufen |
| POST | /api/ext/entries | Neuen Eintrag erstellen |
| PUT | /api/ext/entries/:id | Eintrag aktualisieren |
| DELETE | /api/ext/entries/:id | Eintrag loeschen |
Eintrag erstellen (POST)
POST /api/ext/entries
Authorization: Bearer eyJ0eXAiOiJKV1Q...
Content-Type: application/json
{
"kvs": [
{ "key": "Title", "value": "Neuer Eintrag" },
{ "key": "URL", "value": "https://example.com" },
{ "key": "UserName", "value": "user@example.com" },
{ "key": "Password", "value": "geheim123", "masked": true },
{ "key": "ShieldType", "value": "Login" }
],
"body": ""
}
Entry-Format
Standard Key-Value Felder
| Key | Zweck | Masked |
|---|---|---|
Title | Anzeigename des Eintrags | nein |
URL | Login-URL fuer Auto-Fill Matching | nein |
UserName | Benutzername / E-Mail | nein |
Password | Passwort | ja |
Notes | Freitext-Notizen | nein |
ShieldType | Typ: Login, CreditCard, Address, BankAccount, etc. | nein |
Benutzerdefinierte KVs koennen beliebig hinzugefuegt werden (z.B. CardNumber, TOTP, PIN).
WebAuthn Registrierung
Zwei-Schritt-Prozess: Challenge anfordern, dann Credential registrieren.
POST /api/ext/webauthn/register-begin
// 1. Challenge anfordern
POST /api/ext/webauthn/register-begin
Authorization: Bearer eyJ0eXAiOiJKV1Q...
// Response: PublicKeyCredentialCreationOptions
// → An navigator.credentials.create() uebergeben
POST /api/ext/webauthn/register-finish
// 2. Credential senden
POST /api/ext/webauthn/register-finish
Authorization: Bearer eyJ0eXAiOiJKV1Q...
Content-Type: application/json
// Body: AuthenticatorAttestationResponse (base64url encoded)
WebAuthn Authentifizierung
POST /api/ext/webauthn/auth-begin
POST /api/ext/webauthn/auth-finish
Gleicher Zwei-Schritt-Prozess wie Registrierung, nutzt navigator.credentials.get().
rpID: "localhost". IP-Adressen (z.B. 192.168.x.x) funktionieren nicht mit webauthn-rs. Der Server muss ueber localhost erreichbar sein.
Extension: GET_MATCHES
Findet passende Eintraege fuer eine URL (via chrome.runtime.sendMessage).
// Content Script → Service Worker
chrome.runtime.sendMessage({
action: "GET_MATCHES",
url: "https://github.com/login"
}, (response) => {
// response.entries: Array von passenden Eintraegen
});
Extension: FILL_CREDENTIALS
Fuellt Credentials in das aktive Tab ein.
chrome.runtime.sendMessage({
action: "FILL_CREDENTIALS",
entryId: "a1b2c3d4",
tabId: 123
});
Extension: GENERATE_PASSWORD
Generiert ein Passwort mit den angegebenen Parametern.
chrome.runtime.sendMessage({
action: "GENERATE_PASSWORD",
length: 20,
upper: true,
lower: true,
digits: true,
symbols: true
}, (response) => {
// response.password: "xK#9mP2&qL..."
});
Extension: COPY_TO_CLIPBOARD
Kopiert einen Wert in die Zwischenablage mit automatischem Loeschen nach Timeout.
chrome.runtime.sendMessage({
action: "COPY_TO_CLIPBOARD",
value: "geheim123",
timeout: 30 // Sekunden bis Auto-Clear
});