background
cli-authv0.1.0-beta

OAuth بمعيار للإنتاج لسطر الأوامر CLI الخاص بك

مكتبة مصادقة شاملة وقابلة للتخصيص بالكامل. أربعة تدفقات. تخزين الرموز، تحديث الرموز، قفل للعمليات المتزامنة، تكامل مع keychain. كل جزء مُدار وقابل للتبديل.

$npm install cli-auth
رخصة MITNode.js 22+Bun 1.1+ESM فقطTypeScript
~/projects/your-cli — zsh

أربعة تدفقات. مكتبة واحدة.

اختر استراتيجية. كل التوصيلات متوفرة معها.

رمز الجهازRFC 8628

الحل المثالي للخوادم، قشور Docker، وأي جهاز لا يمكنه فتح متصفح.

  • حلقة الاستطلاع تدير تباطؤ slow_down والموعد النهائي لانتهاء الصلاحية بالنيابة عنك
  • يتم عرض رمز المستخدم عبر رد الاتصال onAuthorization بحيث يمكنك اختيار كيفية عرضه
  • يتم التحديث تلقائيًا عندما يقترب رمز الوصول من انتهاء الصلاحية
متى تستخدم هذا → بدون واجهة رسومية، SSH، أو عن بُعد. في أي مكان لا يستطيع المتصفح الوصول إليه. يقوم المستخدم بتسجيل الدخول من حاسوبه بينما ينتظر سطر الأوامر في الخلفية.
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، وصفحة رد الاتصال كلها نقط تطويع. لا يوجد شيء ثابت في الشيفرة. اضغط على أي خانة وشاهد التهيئة تتغير مباشرة.

بدّل التخزين
keychain في macOS ، Credential Store في Windows ، أو Secret Service في لينكس، حسب النظام. عبر @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 أو مزودي الخدمة الخاصين بي؟

كيف يعمل القفل متعدد العمليات بالضبط؟

ماذا لو كان keyring في النظام غير متوفر؟

ما هي بيئات التشغيل المدعومة؟

هل يمكن تخصيص صفحة رد الاتصال بعد تسجيل الدخول؟

افتح المزيد مع Logto Cloud

مصادقة CLI دون الحاجة إلى كتابتها بنفسك.