background
cli-authv0.1.0-beta

Produktionsreifes OAuth für deine CLI

Eine umfassende, vollständig konfigurierbare Authentifizierungsbibliothek. Vier Flows. Token-Speicherung, Refresh, prozessübergreifende Sperre, Integration in den Schlüsselbund. Jedes Teil enthalten, jedes Teil austauschbar.

$npm install cli-auth
MIT-LizenzNode.js 22+Bun 1.1+Nur ESMTypeScript
~/projects/your-cli — zsh

Vier Flows. Eine Bibliothek.

Wähle eine Strategie. Die Infrastruktur ist dabei.

GerätecodeRFC 8628

Die beste Lösung für Server, Docker-Shells und jede Box, auf der sich kein Browser öffnen lässt.

  • Polling-Schleife kümmert sich für dich um slow_down Back-off und die Ablauf-Deadline
  • Nutzercode wird über ein onAuthorization Callback bereitgestellt, du entscheidest, wie du ihn anzeigst
  • Automatische Erneuerung, wenn das Zugriffstoken bald abläuft
Wann solltest du das verwenden → Headless, SSH oder Remote. Überall, wo deine CLI irgendwo läuft, wo ein Browser nicht hinkommt. Der Nutzer meldet sich vom Laptop an, während deine CLI im Hintergrund pollt.
device-code.ts
1import { createCliAuth, keyringStorage } from 'cli-auth';2import { Entry } from '@napi-rs/keyring';3 4const auth = createCliAuth({5  strategy: 'device-code',6  provider: {7    metadata: {8      deviceAuthorizationEndpoint: 'https://your-tenant.logto.app/oidc/device/auth',9      tokenEndpoint: 'https://your-tenant.logto.app/oidc/token',10    },11  },12  clientId: 'your-cli-client',13  storage: keyringStorage({ entry: new Entry('your-cli', 'tokens') }),14  scope: 'openid offline_access',15});16 17await auth.login({18  onAuthorization: ({ userCode, verificationUri }) => {19    console.log(`Visit ${verificationUri} and enter ${userCode}`);20  },21});22 23const accessToken = await auth.getToken();

Die Dinge, die dir niemand über CLI-Auth erzählt.

Jede Notiz unten ist ein echter Bug, ein Race-Condition oder eine Spezifikations-Klausel, die wir bereits abgedeckt haben.

slow_down back-off
PKCE verifier + challenge
loopback on 127.0.0.1
O_CREAT | O_EXCL
atomic write + rename
cross-process lock
recheck after lock
0600 permissions
macOS Keychain
Windows Credential Store
Linux Secret Service
refresh token single-use
expiry threshold
per-resource token cache
proxy / OTel fetch hook
branded callback page
custom parameters
TypeScript discriminated unions
…and tests.
background

Tausche jedes Teil. Nichts ist eine Blackbox.

Speicherung, Sperre, Fetch und die Callback-Seite sind alles Hooks. Nichts ist fest eingebaut. Klick auf einen Slot und sieh zu, wie sich die Konfiguration selbst umschreibt.

Tausche das Speicherung
macOS Schlüsselbund, Windows Credential Store oder Linux Secret Service, je nachdem, was das Betriebssystem bietet. Über @napi-rs/keyring.
cli-auth.config.ts
1import { createCliAuth } from 'cli-auth';2 3const auth = createCliAuth({4  strategy: 'authorization-code',5  provider: { /* ... */ },6  clientId: 'your-cli-client',7  storage: keyringStorage({ entry: new Entry('your-cli', 'tokens') }),8});

Bring deinen eigenen Identity-Provider mit

Jeder OAuth 2.0 / OIDC-kompatible Server funktioniert. Setze die Bibliothek auf deine Endpunkte und sie läuft. Wir haben dies nicht nur für Logto gebaut.

Logto
Auth0
Okta
Keycloak
Microsoft Entra
Google
Authelia
Any OIDC 2.0 server
Logto
Auth0
Okta
Keycloak
Microsoft Entra
Google
Authelia
Any OIDC 2.0 server

Oft gestellte Fragen

Worin unterscheidet sich das von openid-client?

Funktioniert es mit Auth0, Okta oder meinem eigenen Anbieter?

Wie funktioniert prozessübergreifendes Locking genau?

Was wenn der OS-Schlüsselbund nicht verfügbar ist?

Welche Laufzeiten werden unterstützt?

Kann ich die Callback-Seite nach dem Login branden?

Entdecken Sie mehr mit Logto Cloud

CLI-Authentifizierung, ohne sie selbst schreiben zu müssen.