Allgemein
Wir haben eine Standard-REST-API für die Verwaltung von Geheimnissen. Alle Anfragen und Antworten verwenden das JSON-Format.
Sie können die API verwenden, um sowohl die Verschlüsselung als auch die Entschlüsselung des Geheimnisses außerhalb unseres Dienstes durchzuführen, ohne dass Sie assets von uns zu laden. Außerdem können Sie jede beliebige Übermittlungsmethode für den Teil des öffentlichen Kennworts (die Hälfte des Kennworts, aus dem der Verschlüsselungsschlüssel für das Geheimnis abgeleitet wird) verwenden und grundsätzlich jede beliebige benutzerdefinierte Konfiguration für die Anzeige des Geheimnisses erstellen.
Code-Beispiele
Bitte sehen Sie sich unsere API-Beispiele an, wie Sie die API verwenden können.
Authentifizierung
Wir verwenden zwei Arten von API-Schlüsseln für die Authentifizierung:
- Öffentliche API-Schlüssel
- Private API-Schlüssel
Öffentliche API-Schlüssel sind für die Erstellung einer benutzerdefinierten, selbst gehosteten Geheimansichtsseite gedacht. Alle anderen API-Aktionen erfordern einen privaten API-Schlüssel.
Öffentliche API-Schlüssel können in öffentlichen Skripten verwendet werden. Private API-Schlüssel müssen immer geheim gehalten werden.
Beide API-Schlüssel enthalten den Typ des Schlüssels im Schlüssel selbst, so dass sie leicht unterschieden werden können.
Der API-Schlüssel muss im Authorization: ApiKey <key> Header gesendet werden, wie:
Authorization: ApiKey public_key_abc...
Fehler
Bei einer erfolglosen Abfrage enthält die Antwort ein Fehlerobjekt.
Das Objekt enthält die folgenden Felder:
- message: die vollständige Fehlermeldung, z. B. "Ciphertext can't be blank"
- field: das Feld, auf das sich der Fehler bezieht, z. B. "ciphertext"
Der HTTP-Antwortstatuscode zeigt ebenfalls einen Fehler an, z. B:
- 403 Forbidden: die Anfrage war nicht zulässig, z. B. wegen eines ungültigen API-Schlüssels
- 404 Not Found: das angeforderte Geheimnis wurde nicht gefunden
Geheimnis ansehen
Art der Anfrage: GET
Abfragepfad: https://password.link/api/secrets/<id>
Statuscode der erfolgreichen Abfrage: 200 OK
Holt den Chiffretext, den privaten Passwortteil und andere Details eines Geheimnisses. Erfordert den öffentlichen API-Schlüssel.
Diese API-Abfrage kann verwendet werden, um eine benutzerdefinierte, selbst gehostete Seite zur Anzeige von Geheimnissen zu erstellen, die keine Skripte oder andere Assets von unserem Dienst lädt.
Der erfolgreiche Abruf eines Geheimnisses markiert es automatisch als angesehen und löscht somit den Chiffretext und den privaten Kennwortteil aus unserer Datenbank, so dass es unmöglich ist, das Geheimnis erneut anzuzeigen.
Erforderliche Parameter- id: die ID des Geheimnisses, zum Beispiel dT5g
Abfrage-Beispiel
curl -H "Authorization: ApiKey public_key_abcd" https://password.link/api/secrets/dT5g
Antwort-Beispiel
{ "data": { "id":"die ID des Geheimnisses", "ciphertext": "der Chiffretext des Geheimnisses", "password_part_private": "der private Passwortteil des Geheimnisses", "message":"die Nachricht für das Geheimnis, falls festgelegt" }, "metadata": { "secrets_total": 1, "secrets_usage": 1, "secrets_allowance": 1 } }
Code-Beispiel
Bitte sehen Sie sich unsere API-Beispiele an.
Geheimnis erstellen
Typ der Anfrage: POST
Abfragepfad: https://password.link/api/secrets
Statuscode der erfolgreichen Abfrage: 201 Erstellt
Dieser API-Aufruf unterstützt auch das Hinzufügen eines Anhangs zum Geheimnis. Bitte kontaktieren Sie uns für weitere Details.
Erstellen Sie ein verschlüsseltes Geheimnis.
Um das Geheimnis client-seitig zu verschlüsseln, bevor es an unsere API gesendet wird, muss ein SJCL-kompatibler JSON-String mit Chiffretext erstellt werden. Das korrekte Format des JSON-Strings entnehmen Sie bitte der SJCL-Dokumentation, und in unseren API-Beispielen finden Sie Beispiele für die Erstellung des Chiffriertextes.
Erstellen des Kennworts für die Verschlüsselung des Geheimnisses
Das Passwort, das zur Verschlüsselung des Geheimnisses in AES verwendet wird, muss aus zwei 18 Zeichen langen Zeichenketten bestehen. Der eigentliche Chiffrierschlüssel ist die Verkettung dieser beiden Zeichenfolgen ("privater Teil" + "öffentlicher Teil") und wird von SJCL mithilfe von PBKDF2 aus dem Kennwort abgeleitet.
Beispiel für die Erstellung des privaten und öffentlichen Teils des Passworts:
Passwort: fkgjbnvlakwiejgutnFIGKEOTIRUBNAKQJRL => Privater Teil: fkgjbnvlakwiejgutn => Öffentlicher Teil: FIGKEOTIRUBNAKQJRL
Der private Teil muss vor der Übermittlung an unsere API in Base64 kodiert werden. Wenn Sie die von uns zur Verfügung gestellte Seite view secret verwenden, müssen Sie auch den öffentlichen Teil Base64-kodieren. Wenn Sie eine selbst gehostete geheime Ansichtsseite verwenden, können Sie dieselbe Methode verwenden oder eine eigene erstellen. Bitte sehen Sie sich unsere API-Beispiele für Referenzimplementierungen an.
Erforderliche SJCL-AES-Einstellungen
Bei der Verschlüsselung des Geheimnisses müssen Sie die folgenden Einstellungen für AES verwenden:
- Modus: AES-GCM (SJCL-Einstellung: "mode:gcm")
- Schlüsselgröße: 256 Bit (SJCL-Einstellung: "ks:256")
- Schlüsselableitungsfunktion: PBKDF2 (SJCL-Voreinstellung)
- PBKDF2-Iterationen: 10000 (SJCL-Einstellung: "iter:10000")
Nutzdaten der Anfrage
{ "ciphertext": "ciphertext", "password_part_private": "password_part_private", "description": "description", "message": "message", "expiration": "expiration", "view_button": "view_button", "captcha": "captcha", "password": "password", "max_views": "max_views" }
Parameter der Anfrage
- ciphertext: Ein SJCL-kompatibler JSON-Chiffretext-String des Geheimnisses, kodiert in Base64.
- password_part_private: der private Passwortteil, der zur Verschlüsselung des Geheimnisses verwendet wurde, im Base64-Format.
- description (optional): eine Beschreibung für das Geheimnis. Kann bei der Anzeige des Geheimnisses nicht gesehen werden.
- message (optional): eine Nachricht für das Geheimnis. Wird zusammen mit dem Geheimnis angezeigt.
- expiration (optional): eine Ablaufzeit für das Geheimnis, in Stunden. Mögliche Werte: 0-350.
- view_button (optional): Zeigt eine Schaltfläche zum Anzeigen des Geheimnisses an, anstatt das Geheimnis sofort nach dem Öffnen des Links anzuzeigen. Um diese Funktion zu aktivieren, setzen Sie diesen Wert auf true.
- captcha (optional): zeigt ein einfaches CAPTCHA an, bevor das Geheimnis angezeigt wird, hauptsächlich um automatische Scanner zu blockieren. Um diese Funktion zu aktivieren, setzen Sie diesen Wert auf true.
- password (optional): ein Passwort für das Geheimnis.
- max_views (optional): wie oft das Geheimnis angesehen werden kann. Mögliche Werte: 1-100.
Code-Beispiel
Bitte sehen Sie sich unsere API-Beispiele an.
Geheimnisse auflisten
Typ der Anfrage: GET
Abfragepfad: https://password.link/api/secrets
Statuscode der erfolgreichen Abfrage: 200 OK
Abrufen einer Liste von Geheimnissen. Enthält nicht die Teile der Chiffretexte für private Passwörter, sondern nur IDs, Beschreibungen und Ähnliches.
Limit und Offset
Die maximale Anzahl der zurückgegebenen Geheimnisse für jede Abfrage ist auf 50 begrenzt. Sie können den Offset mit dem optionalen Abfrageparameter offset steuern.
Um zum Beispiel die ersten 50 Datensätze zu überspringen, verwenden Sie eine Abfrage wie: .../api/secrets?offset=50
Abfrage-Beispiel
curl -H "Authorization: ApiKey private_key_abcd" https://password.link/api/secrets
Beispiel für eine Antwort
{ "data": [ { "id": die ID des Geheimnisses, "created_at": wann das Geheimnis erstellt wurde, "message": die Nachricht für das Geheimnis, "description": die Beschreibung des Geheimnisses, "view_button": ist die Schaltfläche "Geheimnis anzeigen" aktiviert, "captcha": ist das CAPTCHA aktiviert, "password": Verfügt das Geheimnis über ein Passwort, "expiration": Verfallszeit in Stunden, "expired": ist das Geheimnis abgelaufen, "view_times": wie oft wurde das Geheimnis bereits angesehen, "max_views": die maximale Anzahl der Aufrufe des Geheimnisses, "views": [ { "viewed_at": ein Zeitstempel, wann das Geheimnis angesehen wurde, "viewed_by_ip": IP-Adresse des Betrachters, "viewed_by_user_agent": Benutzer-Agent des Betrachters } ] } ], "metadata": { "secrets_total": 1, "secrets_usage": 1, "secrets_allowance": 1 } }
Geheimnis löschen
Typ der Anfrage: DELETE
Abfragepfad: https://password.link/api/secrets/<id>
Statuscode der erfolgreichen Abfrage: 200 OK
Löschen eines Geheimnisses.
Beispiel für eine Abfrage
curl -H "Authorization: ApiKey private_key_abcd" \ -X DELETE https://password.link/api/secrets/dT5g
Antwort-Beispiel
{ "data": null, "metadata": { "secrets_total": 1, "secrets_usage": 1, "secrets_allowance": 1 } }
Geheime Anfrage erstellen
Art der Anfrage: POST
Pfad anfordern: https://password.link/api/secret_requests
Statuscode der erfolgreichen Abfrage: 201 Created
Erstellen Sie einen neuen Geheimantrag.
Parameter anfordern
- description: beschreibung für den Geheimen Antrag.
- message: nachricht für den Secret Request Viewer.
- expiration: verfallszeit für die Geheime Anfrage in Stunden.
- limit: nutzungslimit für die Geheime Anfrage.
- send_request_to_email: sendet den erstellten Link für die geheime Anfrage an die angegebene E-Mail-Adresse.
- send_to_email: den mit dem Secret Request erstellten Secret Link an die angegebene E-Mail-Adresse senden.
- secret_description: beschreibung des Geheimnisses, das mit der Geheimanfrage erstellt wurde.
- secret_message: nachricht für das mit der Secret Request erstellte Secret.
- secret_expiration: ablaufzeit für das mit der Secret Request erstellte Secret in Stunden.
- secret_password: passwort für das mit der Secret Request erstellte Secret, in Stunden.
- secret_max_views: ansichtsgrenze für das mit der Secret Request erstellte Secret.
Beispiel für eine Abfrage
curl -H "Authorization: ApiKey private_key_abcd" \ -H "Content-Type: application/json" -X POST https://password.link/api/secret_requests
Beispiel für eine Antwort
{ "data": { "id":"5e976e6e-d205-4f58-8df9-5ac0048bc702" }, "metadata": { "secrets_total":70, "secrets_usage":25, "secrets_allowance":100, "secret_requests_total":10, "secret_requests_allowance":100 } }
Liste der geheimen Ersuchen
Art der Anfrage: GET
Pfad anfordern: https://password.link/api/secret_requests
Statuscode der erfolgreichen Abfrage: 200 OK
Geheime Anfragen auflisten.
Limit und Offset
Die maximale Anzahl der zurückgegebenen Ergebnisse für jede Abfrage ist auf 50 begrenzt. Sie können den Versatz mit dem optionalen Abfrageparameter offset steuern.
Um zum Beispiel die ersten 50 Datensätze zu überspringen, verwenden Sie eine Abfrage wie diese: .../api/secret_requests?offset=50
Beispiel für eine Abfrage
curl -H "Authorization: ApiKey private_key_abcd" https://password.link/api/secret_requests
Beispiel für eine Antwort
{ "data":[ { "id":"5e976e6e-d205-4f58-8df9-5ac0048bc702", "description":"example", "message":"example", "expiration":3, "limit":1, "send_to_email":"example@example.com", "secret_description":"example", "secret_message":"example", "secret_expiration":"example", "secret_max_views":4, "secret_password":false, "template_id":null } ], "metadata": { "secrets_total":70, "secrets_usage":25, "secrets_allowance":100, "secret_requests_total":10, "secret_requests_allowance":100 } }
Geheime Anfrage löschen
Art der Anfrage: DELETE
Pfad anfordern: https://password.link/api/secret_requests/<id>
Statuscode der erfolgreichen Abfrage: 200 OK
Eine geheime Anfrage löschen.
Beispiel für eine Abfrage
curl -H "Authorization: ApiKey private_key_abcd" \ -X DELETE https://password.link/api/secret_requests/5e976e6e-d205-4f58-8df9-5ac0048bc702
Beispiel für eine Antwort
{ "data": null, "metadata": { "secrets_total":70, "secrets_usage":25, "secrets_allowance":100, "secret_requests_total":10, "secret_requests_allowance":100 } }