background
cli-authv0.1.0-beta

Produktionsklar OAuth för din CLI

Ett komplett, fullt anpassningsbart autentiseringsbibliotek. Fyra flöden. Tokenlagring, uppdatering, låsning mellan processer, nyckelringsintegration. Allt hanteras, allt kan bytas ut.

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

Fyra flöden. Ett bibliotek.

Välj en strategi. Allt bakom kulisserna följer med.

EnhetskodRFC 8628

Det du vill ha för servrar, Docker-shells och alla miljöer där det inte går att öppna en webbläsare.

  • Pollingsslinga hanterar slow_down back-off och utgångstid åt dig
  • Användarkod exponeras via en onAuthorization-återanrop så att du väljer hur den visas
  • Uppdateras automatiskt när åtkomsttokenet närmar sig utgången
När ska du välja detta → Huvudlöst, SSH eller fjärranslutet. Överallt där din CLI körs där en webbläsare inte kan nå. Användaren loggar in via sin laptop medan din CLI väntar i bakgrunden.
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();

Det ingen berättar att CLI-auth egentligen behöver.

Varje punkt nedan är en riktig bugg, race condition eller specifikationsdetalj som vi redan har tagit hand om.

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

Byt ut vilken del du vill. Inget är en svart låda.

Lagring, låsning, hämtning och callback-sida är alla utbytbara. Inget är hårdkodat. Klicka på en plats och se konfigurationen uppdateras automatiskt.

Byt ut lagring
macOS Keychain, Windows Credential Store eller Linux Secret Service beroende på operativsystem. Via @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});

Anslut valfri identitetsleverantör

Alla OAuth 2.0- eller OIDC-kompatibla servrar fungerar. Peka biblioteket mot dina endpoints så kör den. Vi byggde inte detta bara för Logto.

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

Frågor folk ställer

Hur skiljer sig detta från openid-client?

Fungerar det med Auth0, Okta eller min egen leverantör?

Hur fungerar egentligen låsning mellan processer?

Vad händer om OS-nyckelringen inte är tillgänglig?

Vilka körmiljöer stöds?

Kan jag anpassa callback-sidan efter inloggning?

Lås upp mer med Logto Cloud

CLI-autentisering utan att du behöver skriva den själv.