RessourcenDesktop-Auth

Desktop-Auth

Authentifizieren Sie die Close-AI-Desktop-App mit JWT-Anmeldung, Registrierung, Token-Aktualisierung und globaler Abmeldung — mit permissivem CORS und Supabase-Token-Verwaltung.

curl -X POST "https://api.talkturo.com/api/auth/sign-in" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "jane.chen@acme.co",
    "password": "DeskPass_73A9"
  }'
{
  "success": true,
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.desktop_example_access",
    "refresh_token": "refresh_example_q9K2mL7xP4vN8cR1",
    "expires_in": 3600,
    "expires_at": 1735693200,
    "token_type": "bearer",
    "user": {
      "id": "9f3b6e2a-4d85-4d62-95de-f2ec7e4ac8b1",
      "email": "jane.chen@acme.co",
      "user_metadata": {
        "full_name": "Jane Chen"
      }
    }
  }
}
curl -X POST "https://api.talkturo.com/api/auth/refresh" \
  -H "Content-Type: application/json" \
  -d '{
    "refresh_token": "refresh_example_q9K2mL7xP4vN8cR1"
  }'
{
  "success": true,
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.desktop_example_new_access",
    "refresh_token": "refresh_example_h3M8qT1vL6pW2nZ5",
    "expires_in": 3600,
    "expires_at": 1735696800,
    "token_type": "bearer",
    "user": {
      "id": "9f3b6e2a-4d85-4d62-95de-f2ec7e4ac8b1",
      "email": "jane.chen@acme.co",
      "user_metadata": {
        "full_name": "Jane Chen"
      }
    }
  }
}

Desktop-Clients authentifizieren

Verwenden Sie die Desktop-Auth-Endpunkte, um Benutzer anzumelden, Konten zu erstellen, abgelaufene Access-Token zu aktualisieren und Sitzungen zu widerrufen. Diese Routen sind für die Close-AI-Desktop-App und jeden Client ausgelegt, der sich mit Supabase-JWTs statt mit Browser-Cookies authentifiziert.

Alle Desktop-Auth-Routen unterstützen OPTIONS-Preflight-Anfragen und geben permissive CORS-Header zurück, einschließlich Access-Control-Allow-Origin: *. Jede API-Antwort verwendet dieselbe Envelope-Form: success plus entweder data oder error.

Endpunktübersicht

MethodePfadAuthZweck
POST/api/auth/sign-inKeineE-Mail und Passwort gegen Sitzungs-Token eintauschen
POST/api/auth/sign-upKeineNeues Konto erstellen und optional eine Sitzung zurückgeben
POST/api/auth/sign-outBearer JWTRefresh-Token des aktuellen Benutzers global widerrufen
POST/api/auth/refreshKeineRefresh-Token gegen ein neues Token-Paar eintauschen
GET/api/auth/callbackBrowser-FlowOAuth-Callback-Handler
GET/api/auth/confirmBrowser-FlowE-Mail-Bestätigungs-Handler

Authentifizierungsmodell

Desktop-Clients authentifizieren sich, indem sie ein Supabase-Access-Token im Authorization-Header als Bearer-Token senden. Speichern Sie nach Anmeldung oder Aktualisierung sowohl access_token als auch refresh_token und verwenden Sie das Access-Token für geschützte Desktop-Routen.

POST /api/auth/sign-out führt eine globale Abmeldung durch. Dadurch werden alle Refresh-Token des Benutzers ungültig, nicht nur das Token des aktuellen Geräts.

POST /api/auth/sign-in

Tauschen Sie eine E-Mail-Adresse und ein Passwort gegen ein Supabase-Sitzungs-Token-Paar.

Anfragebeispiel

Body-Parameter

body
emailstring
Required

E-Mail-Adresse für das Konto.

body
passwordstring
Required

Passwort für das Konto.

Felder der Erfolgsantwort

successboolean
Required

Gibt true zurück, wenn die Anfrage erfolgreich ist.

data.access_tokenstring
Required

Kurzlebiges JWT, das im Authorization-Header für authentifizierte Desktop-Anfragen verwendet wird.

data.refresh_tokenstring
Required

Länger gültiges Token, um über /api/auth/refresh ein neues Access-Token zu erhalten.

data.expires_ininteger
Required

Lebensdauer des Access-Tokens in Sekunden.

data.expires_atinteger
Required

Unix-Zeitstempel, wann das Access-Token abläuft.

data.token_typestring
Required

Von Supabase zurückgegebener Token-Typ. Typischerweise bearer.

data.userobject
Required

Authentifizierter Benutzerdatensatz, der dem Token-Paar zugeordnet ist.

data.user.idstring
Required

Eindeutige Benutzerkennung.

data.user.emailstring
Required

E-Mail-Adresse des authentifizierten Kontos.

data.user.user_metadataobject
Required

Von Supabase zurückgegebene Benutzermetadaten.

Felder der Fehlerantwort

successboolean
Required

Gibt false zurück, wenn die Authentifizierung fehlschlägt.

errorstring
Required

Menschenlesbare Fehlermeldung. Ungültige Anmeldedaten geben HTTP 401 zurück.

POST /api/auth/sign-up

Erstellen Sie ein neues Konto mit E-Mail-Adresse und Passwort. Je nach Einstellungen Ihres Supabase-Projekts gibt der Endpunkt entweder sofort eine vollständige Sitzung zurück oder ein Benutzerobjekt mit needs_email_confirm auf true.

Body-Parameter

body
emailstring
Required

E-Mail-Adresse für das neue Konto.

body
passwordstring
Required

Passwort für das neue Konto.

Antwortverhalten

Wenn keine E-Mail-Bestätigung erforderlich ist, enthält die Antwort dieselben Token-Felder wie bei der Anmeldung sowie needs_email_confirm: false.

Wenn eine E-Mail-Bestätigung erforderlich ist, enthält die Antwort needs_email_confirm: true und ein user-Objekt, aber noch keine aktiven Sitzungs-Token.

Felder der Erfolgsantwort

successboolean
Required

Gibt true zurück, wenn das Konto erfolgreich erstellt wurde.

data.needs_email_confirmboolean
Required

Gibt an, ob der Benutzer seine E-Mail bestätigen muss, bevor er eine Sitzung erhält oder verwenden kann.

data.access_tokenstring

Wird zurückgegeben, wenn keine E-Mail-Bestätigung erforderlich ist.

data.refresh_tokenstring

Wird zurückgegeben, wenn keine E-Mail-Bestätigung erforderlich ist.

data.expires_ininteger

Wird zurückgegeben, wenn keine E-Mail-Bestätigung erforderlich ist.

data.expires_atinteger

Wird zurückgegeben, wenn keine E-Mail-Bestätigung erforderlich ist.

data.token_typestring

Wird zurückgegeben, wenn keine E-Mail-Bestätigung erforderlich ist.

data.userobject
Required

Neu erstellter Benutzerdatensatz.

data.user.idstring
Required

Eindeutige Benutzerkennung.

data.user.emailstring
Required

E-Mail-Adresse des neuen Kontos.

data.user.user_metadataobject

Von Supabase zurückgegebene Benutzermetadaten, sofern vorhanden.

POST /api/auth/sign-out

Widerrufen Sie die Refresh-Token des aktuellen Benutzers global. Senden Sie das aktuelle Access-Token als Bearer-Token im Authorization-Header.

Dieser Endpunkt ruft supabase.auth.signOut() mit globalem Scope auf. Die Abmeldung von einem Desktop-Client macht alle Refresh-Token dieses Benutzers geräteübergreifend ungültig.

header
Authorizationstring
Required

Bearer-Access-Token in der Form Bearer eyJ....

Felder der Erfolgsantwort

successboolean
Required

Gibt true zurück, wenn die Abmeldung abgeschlossen ist.

data.okboolean
Required

Gibt true zurück, nachdem die globale Abmeldungsanfrage erfolgreich war.

POST /api/auth/refresh

Tauschen Sie ein Refresh-Token gegen ein neues Access-Token und Refresh-Token-Paar. Verwenden Sie diesen Endpunkt, wenn das aktuelle Access-Token abläuft.

Anfragebeispiel

Body-Parameter

body
refresh_tokenstring
Required

Refresh-Token, das zuvor bei Anmeldung oder Registrierung zurückgegeben wurde.

Felder der Erfolgsantwort

successboolean
Required

Gibt true zurück, wenn die Token-Aktualisierung erfolgreich ist.

data.access_tokenstring
Required

Neues Access-Token für nachfolgende authentifizierte Anfragen.

data.refresh_tokenstring
Required

Neues Refresh-Token. Ersetzen Sie das zuvor gespeicherte Refresh-Token nach einer erfolgreichen Aktualisierung.

data.expires_ininteger
Required

Lebensdauer des neuen Access-Tokens in Sekunden.

data.expires_atinteger
Required

Unix-Zeitstempel, wann das neue Access-Token abläuft.

data.token_typestring
Required

Von Supabase zurückgegebener Token-Typ.

data.userobject
Required

Authentifizierter Benutzer, der der aktualisierten Sitzung zugeordnet ist.

Browser-Handler

Zwei verwandte Routen unterstützen browserbasierte Auth-Flows. Sie gehören zum Auth-System, sind aber keine Token-Austausch-Endpunkte für Desktop-Clients.

GET /api/auth/callback

Verarbeitet den Supabase-OAuth-Callback in browserbasierten Anmelde-Flows.

GET /api/auth/confirm

Verarbeitet die E-Mail-Bestätigung nach der Registrierung.

Typischer Desktop-Token-Flow

Speichern Sie das Refresh-Token sicher und behandeln Sie das Access-Token als kurzlebig. Ein typischer Desktop-Client-Flow sieht so aus:

Implementierungshinweise

Verwenden Sie den Authorization-Header nur bei Endpunkten, die ein Access-Token erfordern, z. B. Abmeldung und authentifizierte Desktop-Routen. Anmeldung, Registrierung und Aktualisierung akzeptieren alle JSON-Request-Bodies und erfordern keine bestehende Sitzung.

Ersetzen Sie bei erfolgreicher Aktualisierung beide gespeicherten Token. Die Antwort kann das Refresh-Token rotieren; die weitere Verwendung des alten Refresh-Tokens kann spätere Aktualisierungsversuche fehlschlagen lassen.