الانتقال إلى المحتوى الرئيسي
تُطبِّق Twenty بروتوكول OAuth 2.0 باستخدام رمز التفويض + PKCE للتطبيقات المواجهة للمستخدم، وبيانات اعتماد العميل للوصول من خادم إلى خادم. يُجرى تسجيل العملاء ديناميكيًا عبر RFC 7591 — دون إعداد يدوي في لوحة التحكم.

متى تستخدم OAuth

السيناريوطريقة المصادقة
البرامج النصية الداخلية، والأتمتةمفتاح API
تطبيق خارجي يعمل نيابةً عن مستخدمOAuth — رمز التفويض
من خادم إلى خادم، دون سياق مستخدمOAuth — بيانات اعتماد العميل
تطبيق Twenty مع امتدادات واجهة المستخدم (UI)التطبيقات (يتم التعامل مع OAuth تلقائيًا)

تسجيل عميل

تدعم Twenty التسجيل الديناميكي للعملاء وفقًا لـRFC 7591. لا حاجة إلى إعداد يدوي — سجّل برمجيًا:
POST /oauth/register
Content-Type: application/json

{
  "client_name": "My Integration",
  "redirect_uris": ["https://myapp.com/callback"],
  "grant_types": ["authorization_code"],
  "token_endpoint_auth_method": "client_secret_post"
}
الاستجابة:
{
  "client_id": "abc123",
  "client_secret": "secret456",
  "client_name": "My Integration",
  "redirect_uris": ["https://myapp.com/callback"]
}
احفظ client_secret بأمان — لا يمكن استرجاعه لاحقًا.

النطاقات

النطاقالوصول
apiإمكانية قراءة/كتابة كاملة لواجهات برمجة تطبيقات Core وMetadata
profileقراءة معلومات ملف تعريف المستخدم المُصادَق عليه
اطلب النطاقات كسلسلة مفصولة بمسافات: scope=api profile

تدفق رمز التفويض

استخدم هذا التدفق عندما يعمل تطبيقك نيابةً عن مستخدم Twenty.

1. أعد توجيه المستخدم للتفويض

GET /oauth/authorize?
  client_id=YOUR_CLIENT_ID&
  response_type=code&
  redirect_uri=https://myapp.com/callback&
  scope=api&
  state=random_state_value&
  code_challenge=CHALLENGE&
  code_challenge_method=S256
المعلمةمطلوبالوصف
client_idنعممعرّف العميل المسجّل الخاص بك
response_typeنعميجب أن يكون code
redirect_uriنعميجب أن يطابق عنوان URI لإعادة التوجيه المسجّل
scopeلانطاقات مفصولة بمسافات (القيمة الافتراضية هي api)
stateمُوصى بهسلسلة عشوائية لمنع هجمات CSRF
code_challengeمُوصى بهتحدّي PKCE (تجزئة SHA-256 لـ verifier، بترميز base64url)
code_challenge_methodمُوصى بهيجب أن تكون S256 عند استخدام PKCE
يرى المستخدم شاشة موافقة ويوافق على الوصول أو يرفضه.

٢. معالجة الاستدعاء المرتجع

بعد التفويض، تعيد Twenty التوجيه إلى redirect_uri الخاص بك:
https://myapp.com/callback?code=AUTH_CODE&state=random_state_value
تحقّق من أن قيمة state تطابق ما أرسلته.

٣. استبدِل الرمز بالرموز

POST /oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=AUTH_CODE&
redirect_uri=https://myapp.com/callback&
client_id=YOUR_CLIENT_ID&
client_secret=YOUR_CLIENT_SECRET&
code_verifier=YOUR_PKCE_VERIFIER
الاستجابة:
{
  "access_token": "eyJhbG...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "dGhpcyBpcyBh..."
}

4. استخدم رمز الوصول

GET /rest/companies
Authorization: Bearer ACCESS_TOKEN

5. حدِّث عند انتهاء الصلاحية

POST /oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&
refresh_token=YOUR_REFRESH_TOKEN&
client_id=YOUR_CLIENT_ID&
client_secret=YOUR_CLIENT_SECRET

تدفق بيانات اعتماد العميل

لعمليات التكامل من خادم إلى خادم دون تفاعل مستخدم:
POST /oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&
client_id=YOUR_CLIENT_ID&
client_secret=YOUR_CLIENT_SECRET&
scope=api
الرمز المُعاد يمتلك وصولًا على مستوى مساحة العمل، وغير مرتبط بأي مستخدم محدّد.

اكتشاف الخادم

تنشر Twenty إعدادات OAuth الخاصة بها عند نقطة اكتشاف قياسية:
GET /.well-known/oauth-authorization-server
يعيد هذا جميع نقاط النهاية وأنواع المنح المدعومة والنطاقات والقدرات — وهو مفيد لبناء عملاء OAuth عامّين.

ملخص نقاط نهاية API

نقطة النهايةالغرض
/.well-known/oauth-authorization-serverاكتشاف بيانات تعريف الخادم
/oauth/registerالتسجيل الديناميكي للعميل
/oauth/authorizeتفويض المستخدم
/oauth/tokenمبادلة الرموز وتحديثها
البيئةعنوان URL الأساسي
السحابةhttps://api.twenty.com
الاستضافة الذاتيةhttps://{your-domain}

OAuth مقابل مفاتيح API

مفاتيح واجهة برمجة التطبيقاتOAuth
الإعدادإنشاء من الإعداداتتسجيل عميل، وتنفيذ التدفق
سياق المستخدملا يوجد (على مستوى مساحة العمل)أذونات مستخدم محدّد
الأفضل لـالبرامج النصية، الأدوات الداخليةتطبيقات خارجية، وتكاملات متعددة المستخدمين
تدوير الرموزيدويتلقائي عبر رموز التحديث
وصول محدود بالنطاقاتوصول كامل إلى APIتفصيلي عبر النطاقات