background
cli-authv0.1.0-beta

OAuth ระดับโปรดักชันสำหรับ CLI ของคุณ

ไลบรารีสำหรับยืนยันตัวตนที่ครบถ้วนและต่อเติมได้ทุกชิ้นส่วน รองรับ 4 รูปแบบการเข้าสู่ระบบ มีการจัดเก็บและรีเฟรชโทเค็น ล็อกข้ามโปรเซส ต่อ keychain ได้ ทุกส่วนจัดการให้และเปลี่ยนได้

$npm install cli-auth
สัญญาอนุญาต MITNode.js 22+Bun 1.1+เฉพาะ ESMTypeScript
~/projects/your-cli — zsh

4 รูปแบบในไลบรารีเดียว

เลือกกลยุทธ์ ระบบพื้นฐานจัดการให้ครบ

รหัสอุปกรณ์RFC 8628

รูปแบบที่เหมาะกับ server, shell ใน Docker หรือเครื่องไหนที่เปิด browser ไม่ได้

  • ลูป polling จัดการ slow_down การหน่วงเวลาและหมดอายุให้
  • โค้ดผู้ใช้จะแสดงผลด้วย onAuthorization callback คุณเลือกวิธีแสดงผลเอง
  • Refresh อัตโนมัติเมื่อ access token ใกล้หมดอายุ
ควรใช้เมื่อ → ไม่มีหน้าจอ/SSH/รีโมท ซึ่ง CLI ของคุณอยู่ในที่ ๆ browser เข้าถึงไม่ได้ ให้ผู้ใช้เข้าสู่ระบบจากโน้ตบุ๊ก ในขณะที่ CLI ของคุณ polling อยู่เบื้องหลัง
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 Auth ต้องมี แต่ไม่มีใครบอก

แต่ละข้อคือบั๊ก เงื่อนไข หรือข้อกำหนดที่เราจัดการให้หมดแล้ว

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

เปลี่ยนได้ทุกชิ้น ไม่มีอะไรเป็นกล่องดำ

storage, locking, fetch, หน้า callback เป็น hook ทั้งหมด ไม่มี hardcode คุณคลิกเลือกได้แล้วตัว config จะเปลี่ยนตาม

สลับ ที่เก็บ
ใช้ macOS Keychain, Windows Credential Store หรือ 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});

เลือกใช้ผู้ให้บริการ identity ตามใจ

OAuth 2.0 หรือ OIDC อะไรก็ได้ ชี้ endpoint ไลบรารีทำงานทันที ไม่ได้สร้างมาใช้กับ 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 หรือ provider อื่น ๆ ได้ไหม?

ล็อกข้ามโปรเซสทำงานอย่างไร?

ถ้าไม่มี OS keyring จะทำยังไง?

รองรับ runtime อะไรบ้าง?

เปลี่ยนหน้า callback หลัง login ได้ไหม?

ปลดล็อกมากขึ้นด้วย Logto Cloud

ยืนยันตัวตนบน CLI โดยไม่ต้องเสียเวลาเขียนเอง