background
cli-authv0.1.0-beta

프로덕션급 CLI용 OAuth

배터리 포함, 완전히 플러그형 인증 라이브러리. 4가지 플로우, 토큰 저장, 갱신, 프로세스 간 락, 키체인 통합. 모든 요소를 처리하며, 모든 요소를 교체할 수 있습니다.

$npm install cli-auth
MIT 라이선스Node.js 22+Bun 1.1+ESM 전용TypeScript
~/projects/your-cli — zsh

네 가지 플로우, 하나의 라이브러리.

전략을 선택하세요. 기반 로직은 다 포함됩니다.

디바이스 코드RFC 8628

서버, Docker 셸, 또는 브라우저를 열 수 없는 모든 환경에 적합합니다.

  • 폴링 루프가 slow_down 백오프 및 만료 시간 관리를 자동으로 처리
  • onAuthorization 콜백을 통해 사용자 코드를 전달하므로 표시 방식은 직접 결정
  • 액세스 토큰 만료가 임박하면 자동으로 갱신
이럴 때 사용하세요 → 헤드리스, SSH 또는 원격 환경. 브라우저가 닿을 수 없는 곳이라면 어디든. 사용자는 노트북에서 로그인하고 CLI 는 백그라운드에서 폴링합니다.
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();

CLI 인증에 필요한, 아무도 말해주지 않는 것들.

아래의 모든 항목은 실제 버그, 경쟁 조건, 혹은 우리가 이미 해결한 명세 조항입니다.

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

모든 요소를 교체하세요. 블랙박스는 없습니다.

저장, 락, fetch, 콜백 페이지 모두 후크로 제공됩니다. 하드코딩된 값은 없습니다. 슬롯을 클릭하면 설정이 바로 바뀌는 모습을 볼 수 있습니다.

다음 교체: 저장소
macOS 키체인, Windows 자격 증명 스토어, 또는 Linux Secret Service 등 현재 OS 가 제공하는 키체인 사용. @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});

직접 사용하는 인증 프로바이더를 연결하세요

모든 OAuth 2.0 / OIDC 호환 서버와 동작합니다. 엔드포인트만 지정하면 바로 사용할 수 있습니다. 꼭 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

자주 묻는 질문

openid-client 와 다른 점이 뭔가요?

Auth0, Okta, 또는 내 서버와도 동작하나요?

프로세스 간 락은 실제로 어떻게 동작하나요?

OS 키체인을 사용할 수 없는 경우는?

지원되는 런타임은?

로그인 후 콜백 페이지에 브랜드 적용이 가능한가요?

Logto 클라우드를 통해 더 많은 기능을 이용해보세요

직접 구현하지 않아도 되는 CLI 인증.