background
cli-authv0.1.0-beta

OAuth klasy produkcyjnej dla Twojego CLI

Kompletna, w pełni wymienialna biblioteka do uwierzytelniania. Cztery przepływy. Przechowywanie tokenów, odświeżanie, blokady międzyprocesowe, integracja z keychainem. Każdy element obsłużony i możliwy do wymiany.

$npm install cli-auth
Licencja MITNode.js 22+Bun 1.1+Tylko ESMTypeScript
~/projects/your-cli — zsh

Cztery przepływy. Jedna biblioteka.

Wybierz strategię. Cała infrastruktura w zestawie.

Kod urządzeniaRFC 8628

To to, czego chcesz na serwery, kontenery Docker czy wszędzie tam, gdzie otwarcie przeglądarki nie wchodzi w grę.

  • Pętla pollingowa obsługuje opóźnienia (slow_down) i deadline wygaśnięcia za Ciebie
  • Kod użytkownika przekazywany przez onAuthorization callback — decydujesz jak go pokazać
  • Automatyczne odświeżanie, gdy token dostępu zbliża się do wygaśnięcia
Kiedy tego użyć → Bez głowy, SSH lub zdalnie. Tam, gdzie CLI działa w miejscu bez dostępu przeglądarki. Użytkownik loguje się ze swojego laptopa, a CLI czeka w tle.
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();

O tym nikt nie mówi, że CLI auth tego wymaga.

Każda uwaga poniżej to prawdziwy błąd, warunek wyścigu lub fragment specyfikacji, z którym już się zmierzyliśmy.

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

Zamieniaj dowolny element. Nic nie jest czarną skrzynką.

Przechowywanie, blokady, fetch i strona callback to hooki. Nic nie jest na stałe. Kliknij slot i obejrzyj jak konfiguracja się przepisuje.

Zamień przechowywanie
Keychain macOS, Windows Credential Store lub Linux Secret Service, zależnie od systemu. Przez @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});

Użyj własnego dostawcy tożsamości

Każdy serwer zgodny z OAuth 2.0 / OIDC działa. Wskaż bibliotece swoje endpointy i gotowe. Nie stworzyliśmy tego tylko dla 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

Najczęstsze pytania

Czym to się różni od openid-client?

Czy działa z Auth0, Oktą albo moim dostawcą?

Jak działa blokada międzyprocesowa?

Co jeśli nie ma dostępu do keychaina systemu?

Jakie runtime są wspierane?

Czy mogę ostylować stronę callback po logowaniu?

Odblokuj więcej za pomocą Logto Cloud

Uwierzytelnianie CLI bez potrzeby pisania go samemu.