background
cli-authv0.1.0-beta

Production-grade OAuth voor je CLI

Een alles-in-één, volledig plugbare authenticatiebibliotheek. Vier flows. Tokenopslag, vernieuwen, locking tussen processen, keychain-integratie. Elk onderdeel geregeld, alles verwisselbaar.

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

Vier flows. Eén bibliotheek.

Kies een strategie. De onderliggende techniek wordt meegeleverd.

Device codeRFC 8628

Dit is de flow die je wilt voor servers, Docker-shells en elke box waar een browser openen geen optie is.

  • Polling-loop regelt slow_down back-off en de vervaldatum voor je
  • Gebruikerscode wordt zichtbaar gemaakt via een onAuthorization callback zodat je zelf bepaalt hoe je het toont
  • Vernieuwt automatisch wanneer de toegangstoken bijna verloopt
Wanneer dit gebruiken → Headless, SSH, of remote. Overal waar je CLI zich bevindt waar een browser niet bij kan. De gebruiker logt in vanaf hun laptop terwijl je CLI op de achtergrond 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();

Dingen die niemand je vertelt over CLI-auth.

Elk punt hieronder is een echte bug, race condities of spec-clausule die we al hebben opgelost.

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

Vervang ieder onderdeel. Niets is een black box.

Opslag, locking, fetch en de callbackpagina zijn allemaal hooks. Niets is hard-coded. Klik op een slot en zie de configuratie zichzelf aanpassen.

Vervang de opslag
macOS Keychain, Windows Credential Store of Linux Secret Service, afhankelijk van het OS. 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});

Gebruik je eigen identity provider

Elke OAuth 2.0 / OIDC-conforme server werkt. Wijs de bibliotheek naar je endpoints en het loopt. We hebben dit niet alleen voor Logto gebouwd.

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

Veelgestelde vragen

Hoe verschilt dit van openid-client?

Werkt het met Auth0, Okta, of mijn eigen provider?

Hoe werkt cross-process locking eigenlijk?

Wat als de OS-keyring niet beschikbaar is?

Welke runtimes worden ondersteund?

Kan ik de callback-pagina na login zelf vormgeven?

Ontgrendel meer met Logto Cloud

CLI-authenticatie zonder dat je het zelf hoeft te schrijven.