
# Anmelden mit keenauth login

`keenauth login` meldet Sie mit Ihrem Dashboard-Konto an, damit Sie Ihre Umgebungen über ein Terminal verwalten können, ohne einen API-Schlüssel zu erstellen. Für CI-Jobs und Skripte verwenden Sie weiterhin einen API-Schlüssel in `KEENAUTH_API_KEY` (siehe [Kommandozeilenschnittstelle](/docs/cli)).

## Befehle

| Befehl | Funktion |
|---|---|
| `keenauth login` | Meldet mit dem Geräteablauf an: Die CLI gibt eine Adresse und einen Code aus, Sie öffnen die Adresse auf einem beliebigen Gerät, melden sich am Dashboard an und geben den Code ein. |
| `keenauth login --web` | Meldet im Browser auf diesem Computer an. Die CLI öffnet die Anmeldeseite und empfängt das Ergebnis unter `http://127.0.0.1:<port>/callback` (oder `http://[::1]:<port>/callback`); die Anfrage ist mit PKCE (S256), `state` und dem Parameter `iss` geschützt. |
| `keenauth whoami` | Zeigt den angemeldeten Benutzer, die Organisation und die ausgewählte Umgebung an. |
| `keenauth env use <environment_id>` | Wählt die Umgebung aus, die spätere Befehle verwalten. Die Control Plane prüft, ob Sie dort eine Dashboard-Rolle haben. |
| `keenauth env list` | Listet die Umgebungen auf, an denen Sie arbeiten können, von der Control Plane. Die mit `env use` ausgewählte Umgebung ist mit `*` markiert. |
| `keenauth logout` | Widerruft die Sitzung auf dem Server und entfernt sie von diesem Computer. |

```sh
keenauth login
keenauth env use env_01j9z3c0000000000000000000
keenauth users list
```

Wenn `KEENAUTH_API_KEY` gesetzt ist, hat er immer Vorrang; die gespeicherte Sitzung wird nur verwendet, wenn kein API-Schlüssel gesetzt ist.

## Umgebungen auflisten

`keenauth env list` fragt bei der Control Plane die Umgebungen des Kontos ab, bei dem Sie angemeldet sind und in denen Sie eine Dashboard-Rolle haben (`GET /v1/environments`, siehe [Ihre Umgebungen für die CLI auflisten](/docs/api/control/environments/list)). Dafür wird eine Sitzung benötigt; ohne sie werden Sie aufgefordert, `keenauth login` auszuführen.

| Flag | Beschreibung |
|---|---|
| `--limit` | Seitengröße, 1 bis 100 (Standard 20). |
| `--after` | Der Cursor, den die vorherige Seite ausgegeben hat (`more results: --after <cursor>`). |
| `--all` | Durchläuft die Seiten und listet jede Umgebung auf. |
| `-o table\|json\|yaml` | Ausgabeformat; die Tabelle markiert die ausgewählte Umgebung mit `*`, und in JSON und YAML hat jede Zeile dafür `current: true`. |

Ein ungültiger oder fremder `--after`-Cursor wird abgelehnt (`invalid_cursor`); führen Sie den Befehl erneut ohne ihn aus.

## Funktionsweise der Sitzung

- Die Anmeldung stellt ein kurzlebiges Zugriffstoken (5 Minuten) und ein Aktualisierungstoken (12 Stunden) aus. Beide sind an einen DPoP-Schlüssel (RFC 9449) gebunden, der auf diesem Computer erstellt wurde, sodass ein kopiertes Token nicht von einem anderen Computer verwendet werden kann. Das Aktualisierungstoken wird bei jeder Verwendung rotiert.
- Für jeden Befehl fragt die CLI bei der Control Plane ein Management-Token der ausgewählten Umgebung an. Dieses Token ist 10 Minuten gültig, ist an denselben DPoP-Schlüssel gebunden und wird **nur im Arbeitsspeicher** gehalten; es wird nie auf die Festplatte geschrieben.
- Anfragen an Ihre Umgebung enthalten das Management-Token, einen frischen DPoP-Nachweis und Ihre Dashboard-Identität. Ihre Umgebung prüft, ob Sie noch eine Rolle haben; das Entfernen Ihrer Dashboard-Rolle beendet daher Ihren CLI-Zugriff innerhalb weniger Minuten.

## Speicherort der Sitzung

| Was | Wo |
|---|---|
| Aussteller, Benutzer-ID, Organisation, Fingerabdruck des DPoP-Schlüssels, ausgewählte Umgebungen | `config.json` in `KEENAUTH_CONFIG_DIR` oder in `keenauth` unter Ihrem Benutzerkonfigurationsverzeichnis (Modus 0600) |
| Aktualisierungstoken und privater DPoP-Schlüssel | Der Schlüsselbund des Betriebssystems: macOS-Schlüsselbund (`security`) oder der Secret Service unter Linux (`secret-tool`) |

Die Geheimnisse werden dem Schlüsselbund-Tool über die Standardeingabe übergeben, niemals als Befehlsargumente. Ist kein Schlüsselbund verfügbar (zum Beispiel unter Windows oder auf einem Linux-Server ohne Secret Service), bricht `keenauth login` mit einem Fehler ab. Sie können dann `--insecure-storage` übergeben, um das Aktualisierungstoken und den privaten DPoP-Schlüssel unverschlüsselt in `credentials.json` (Modus 0600) neben `config.json` zu speichern. Die CLI gibt eine Warnung aus: Jeder, der diese Datei lesen kann, kann bis zum Ablauf der Sitzung in Ihrem Namen handeln. Verwenden Sie auf gemeinsam genutzten Computern bevorzugt einen API-Schlüssel.

## Einstellungen

| Variable | Standard | Beschreibung |
|---|---|---|
| `KEENAUTH_LOGIN_ISSUER` | `https://login.keenauth.com` | Der Anmeldeserver. Muss eine `https`-Adresse sein. |
| `KEENAUTH_CONTROL_URL` | `https://api.keenauth.com/v1` | Die Control Plane, die Management-Tokens ausstellt. Muss eine `https`-Adresse sein. |
| `KEENAUTH_CONFIG_DIR` | Ihr Benutzerkonfigurationsverzeichnis + `keenauth` | Wo `config.json` (und mit `--insecure-storage` `credentials.json`) abgelegt wird. |

## Fehler

| Meldung | Was zu tun ist |
|---|---|
| `you are not signed in` / `your session has expired or was revoked` | Führen Sie `keenauth login` erneut aus. Exit-Code 3. |
| `no environment is selected` | Führen Sie `keenauth env use <environment_id>` aus. |
| `environment … does not exist or you have no dashboard role in it` | Prüfen Sie die ID im Dashboard oder bitten Sie einen Inhaber um eine Rolle. |
| `no OS keychain is available` | Installieren Sie einen Schlüsselbund, verwenden Sie `--insecure-storage` oder einen API-Schlüssel. |
