background
cli-authv0.1.0-beta

OAuth de calidad de producción para tu CLI

Una biblioteca de autenticación totalmente funcional, totalmente conectable. Cuatro flujos. Almacenamiento de tokens, refresco, bloqueo entre procesos, integración con el llavero. Todo gestionado, todo intercambiable.

$npm install cli-auth
Licencia MITNode.js 22+Bun 1.1+Sólo ESMTypeScript
~/projects/your-cli — zsh

Cuatro flujos. Una sola biblioteca.

Elige una estrategia. La infraestructura va incluida.

Código de dispositivoRFC 8628

El que necesitas para servidores, shells Docker y cualquier máquina donde abrir un navegador no sea una opción.

  • El bucle de polling gestiona el retroceso slow_down y la caducidad por ti
  • El código de usuario se muestra mediante un callback onAuthorization, así decides cómo mostrarlo
  • Se refresca automáticamente cuando el token de acceso está cerca de caducar
Cuándo elegir este → Sin interfaz gráfica, SSH o remoto. Dondequiera que tu CLI esté y el navegador no pueda acceder. El usuario inicia sesión desde su portátil mientras tu CLI hace polling en segundo plano.
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();

Los detalles que nadie te dice que la auth en CLI necesita.

Cada apunte es un bug real, una condición de carrera o una cláusula de la especificación que ya hemos resuelto.

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

Cambia cualquier parte. Nada es una caja negra.

Almacenamiento, bloqueo, fetch y la página de callback son todos hooks. Nada está codificado fijamente. Haz clic en una ranura y verás cómo la configuración se actualiza sola.

Cambia el almacenamiento
Llavero de macOS, Almacenamiento de credenciales de Windows o Servicio de secretos de Linux, según el sistema operativo. Vía @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});

Usa tu propio proveedor de identidad

Funciona con cualquier servidor OAuth 2.0 / OIDC compatible. Apunta la librería a tus endpoints y funcionará. No lo construimos sólo para 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

Preguntas frecuentes

¿En qué se diferencia de openid-client?

¿Funciona con Auth0, Okta o mi propio proveedor?

¿Cómo funciona realmente el bloqueo entre procesos?

¿Qué pasa si el llavero del sistema operativo no está disponible?

¿Qué runtimes son compatibles?

¿Puedo personalizar la página de callback tras el login?

Desbloquea más con Logto Cloud

Autenticación CLI sin tener que implementarla tú mismo.