Authagonal
التوثيق
كل ما تحتاجه للبدء مع Authagonal — من إنشاء أول مستأجر لك إلى ربط SSO وSCIM والعلامة التجارية المخصصة.
البدء
يمنح Authagonal كل مستأجر خادم OIDC متوافقًا تمامًا مع المعايير. يحصل كل مستأجر على عنوان URL خاص بالمُصدِر، ووثيقة اكتشاف، ونقاط نهاية للرموز، دون أي بنية تحتية مشتركة بين المستأجرين. يمكنك الانتقال من الصفر إلى تدفق تسجيل دخول يعمل بالكامل في أقل من 5 دقائق.
إنشاء حساب
سجّل في authagonal.io واختر معرّفًا (slug) لحسابك. يصبح هذا المعرّف نطاق المُصدِر الخاص بك: {slug}.authagonal.io. بعد إنشاء حسابك، تحقق من عنوان بريدك الإلكتروني للبدء.


اختر معرّفًا فريدًا لحسابك أثناء التسجيل
تسجيل عميل
انتقل إلى العملاء في الشريط الجانبي للبوابة وانقر على إنشاء. أدخل clientId وclientName لتطبيقك. ثم اضبط عنوان إعادة توجيه واحدًا على الأقل، وهو المكان الذي يُرسَل إليه المستخدمون بعد المصادقة. على سبيل المثال: https://app.example.com/callback.


سجّل عميل OAuth جديدًا في البوابة
التطوير المحلي
http://localhost:3000/callback كعنوان إعادة توجيه للتطوير المحلي. يسمح Authagonal بعناوين إعادة توجيه غير مشفّرة بـ HTTPS لمصادر localhost.أول تسجيل دخول لك
أسرع طريقة للتكامل هي عبر oidc-client-ts، وهي مكتبة عميل OIDC خفيفة لتطبيقات JavaScript وTypeScript.
import { UserManager } from 'oidc-client-ts';
const mgr = new UserManager({
authority: 'https://acme.authagonal.io',
client_id: 'my-app',
redirect_uri: 'https://app.example.com/callback',
response_type: 'code',
scope: 'openid profile email',
});
// Redirect to login
mgr.signinRedirect();
// On callback page
const user = await mgr.signinRedirectCallback();
console.log(user.profile); // { sub, email, name, ... }إذا كنت تفضّل نهجًا بسيطًا دون مكتبة، يمكنك استخدام تدفق رمز التفويض القياسي في OAuth 2.0 مع fetch البسيط:
// 1. Redirect the user to the authorization endpoint
const authorizeUrl = new URL('https://acme.authagonal.io/connect/authorize');
authorizeUrl.searchParams.set('client_id', 'my-app');
authorizeUrl.searchParams.set('redirect_uri', 'https://app.example.com/callback');
authorizeUrl.searchParams.set('response_type', 'code');
authorizeUrl.searchParams.set('scope', 'openid profile email');
authorizeUrl.searchParams.set('code_challenge', codeChallenge);
authorizeUrl.searchParams.set('code_challenge_method', 'S256');
window.location.href = authorizeUrl.toString();
// 2. On the callback page, exchange the code for tokens
const res = await fetch('https://acme.authagonal.io/connect/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'authorization_code',
code: new URLSearchParams(window.location.search).get('code')!,
redirect_uri: 'https://app.example.com/callback',
client_id: 'my-app',
code_verifier: codeVerifier,
}),
});
const tokens = await res.json();
// tokens.id_token, tokens.access_token, tokens.refresh_token

صفحة تسجيل الدخول الافتراضية لمستأجرك
وضع بيئة الاختبار
{slug}-sandbox.authagonal.io) ويمكن تحديثهم من بيئة الإنتاج في أي وقت دون التأثير على المستخدمين الفعليين.لوحة التحكم
تمنحك لوحة التحكم في البوابة نظرة عامة في الوقت الفعلي على مستأجرك. فهي تُبرز المقاييس الأكثر أهمية: نمو المستخدمين، ونشاط المصادقة، والتنقل السريع إلى كل ميزة في البوابة.
نظرة عامة
في أعلى لوحة التحكم سترى رسالة ترحيب إلى جانب إجمالي عدد المستخدمين الحالي. وأسفل ذلك، يعرض مخطط المستخدمون النشطون يوميًا سجلًا لمدة 7 أيام للمستخدمين الفريدين الذين قاموا بالمصادقة كل يوم، مما يمنحك نبضًا سريعًا لاتجاهات التفاعل.


الشاشة الرئيسية للوحة التحكم مع مخطط المستخدمين النشطين يوميًا ونظرة عامة على النشاط
مقاييس النشاط
تعرض لوحة مقاييس النشاط أربع بطاقات إحصائية تلخّص أحداث المصادقة الرئيسية:
- عمليات تسجيل الدخول الناجحة ، إجمالي تدفقات المصادقة المكتملة
- عمليات تسجيل الدخول الفاشلة ، بيانات اعتماد غير صحيحة، أو حسابات مقفلة، أو رفض بسبب السياسة
- المستخدمون النشطون ، المستخدمون الفريدون الذين قاموا بالمصادقة في الفترة المحددة
- عمليات SCIM ، أحداث تزويد المستخدمين والمجموعات من موفّري الهوية المتصلين
استخدم عوامل تصفية النطاق الزمني للتبديل بين 24 ساعة و3 أيام و7 أيام و30 يومًا. تتحدّث جميع البطاقات الإحصائية والمخططات لتعكس النافذة المحددة.


مقاييس النشاط مع نطاق زمني قابل للتهيئة
التنقل السريع
أسفل لوحة المقاييس، تربط بطاقات التنقل مباشرةً بكل ميزة رئيسية: العملاء، والمستخدمون، والمجموعات، والأدوار، وSSO، وSCIM، والعلامة التجارية، والإعدادات. تعرض كل بطاقة وصفًا موجزًا حتى يتمكن أعضاء الفريق الجدد من توجيه أنفسهم بسرعة.
العملاء
يمثّل عملاء OAuth التطبيقات التي تُصادق المستخدمين عبر مستأجرك. لكل عميل تهيئته الخاصة لعناوين إعادة التوجيه، والنطاقات، وأنواع المنح، ومدد صلاحية الرموز، وسياسة MFA.
قائمة العملاء
تعرض صفحة العملاء جدولًا بجميع العملاء المسجّلين. يُظهر كل صف clientId، والاسم المعروض، وأنواع المنح المسموح بها كشارات ملونة، وما إذا كان PKCE مفعّلًا. انقر على أي صف لفتح محرّر التهيئة الكامل.


قائمة العملاء مع شارات أنواع المنح ومؤشرات PKCE
إنشاء عميل
انقر على إنشاء عميل لتسجيل تطبيق جديد. تحتاج إلى تقديم حقلين:
clientId، معرّف فريد للعميل (مثلmy-spa)clientName، اسم معروض مقروء للبشر


سجّل عميل OAuth جديدًا
حذف عميل
لحذف عميل، افتح تهيئة العميل وانقر على زر حذف العميل أسفل الصفحة. سيُطلب منك التأكيد قبل إزالة العميل نهائيًا. تُبطَل على الفور جميع الجلسات والرموز النشطة الخاصة بالعميل المحذوف.
مرجع تهيئة العميل
لكل عميل مجموعة شاملة من خيارات التهيئة منظّمة في عدة أقسام.
الإعدادات العامة
| الإعداد | الوصف | الافتراضي |
|---|---|---|
clientName | الاسم المعروض في شاشات الموافقة وفي البوابة | — |
requirePkce | اشتراط Proof Key for Code Exchange في تدفقات رمز التفويض | مُفعّل |
requireClientSecret | اشتراط سر العميل لطلبات الرموز (عطّله للعملاء العامين مثل تطبيقات الصفحة الواحدة SPAs) | مُعطّل |
allowOfflineAccess | السماح للعميل بطلب رموز التحديث عبر نطاق offline_access | مُعطّل |
alwaysIncludeUserClaimsInIdToken | تضمين جميع مطالبات المستخدم مباشرةً في رمز الهوية بدلًا من اشتراط استدعاء UserInfo | مُعطّل |
includeGroupsInTokens | تضمين عضويات المستخدم في المجموعات كمطالبة groups في رمز الهوية | مُعطّل |
أمان PKCE
العناوين (URIs)
تستخدم حقول URI إدخالًا على هيئة وسوم، اكتب قيمة واضغط Enter أو فاصلة لإضافتها. انقر على علامة X في أي وسم لإزالته.
| الإعداد | الوصف |
|---|---|
redirectUris | عناوين رد النداء المسموح بها بعد المصادقة. يجب أن تطابق تمامًا معامل redirect_uri في طلبات التفويض. |
postLogoutRedirectUris | العناوين المسموح بإعادة التوجيه إليها بعد تسجيل الخروج. |
allowedCorsOrigins | المصادر المسموح لها بإجراء طلبات عبر الأصول إلى نقطتي نهاية الرموز وUserInfo. |


حقول إدخال على هيئة وسوم لتهيئة العناوين (URIs)
النطاقات وأنواع المنح
| الإعداد | الخيارات |
|---|---|
allowedScopes | openid profile email offline_access |
allowedGrantTypes | authorization_code client_credentials refresh_token device_code |
مدد صلاحية الرموز
| الإعداد | الوصف | الافتراضي |
|---|---|---|
accessTokenLifetimeSeconds | مدة صلاحية رموز الوصول | 1800 (30 دقيقة) |
identityTokenLifetimeSeconds | مدة صلاحية رموز الهوية | 300 (5 دقائق) |
authorizationCodeLifetimeSeconds | مدة صلاحية رموز التفويض للاستبدال | 300 (5 دقائق) |
absoluteRefreshTokenLifetimeSeconds | الحد الأقصى لمدة صلاحية رمز التحديث بغض النظر عن النشاط | 2592000 (30 يومًا) |
slidingRefreshTokenLifetimeSeconds | تُعاد ضبط مدة انتهاء رمز التحديث عند كل استخدام، حتى الحد الأقصى للمدة المطلقة | 1296000 (15 يومًا) |


اضبط مدد صلاحية الرموز لكل عميل
عناوين تسجيل الخروج
يمكن للعملاء تسجيل عناوين تسجيل خروج عبر القناة الخلفية والقناة الأمامية معًا. كلاهما أو أحدهما اختياري، اضبط ما يناسب طريقة مسح تطبيقك لجلسته.
| الإعداد | الوصف |
|---|---|
backChannelLogoutUri | طلب POST من خادم إلى خادم مع رمز تسجيل خروج موقّع. موثوق حتى عندما يكون متصفّح المستخدم غير متصل. |
frontChannelLogoutUri | يُعرض في إطار iframe مخفي أثناء تسجيل الخروج حتى يمسح المتصفّح ملفات تعريف الارتباط والتخزين المحلي. |
frontChannelLogoutSessionRequired | عند تفعيله، يتلقى عنوان تسجيل الخروج معاملي الاستعلام iss وsid حتى يتمكن تطبيقك من ربط تسجيل الخروج بالجلسة المحددة. |
استخدمهما معًا
سياسة MFA
يمكن لكل عميل تجاوز سياسة MFA على مستوى المستأجر بإعداد خاص بكل عميل. تقدّم قائمة سياسة MFA المنسدلة ثلاثة خيارات:
| السياسة | السلوك |
|---|---|
| مُعطّلة | لا يُطلب MFA أبدًا لهذا العميل |
| مُفعّلة | يمكن للمستخدمين التسجيل اختياريًا في MFA، وسيُطلب منهم إذا كانوا مسجّلين |
| مطلوبة | يجب على جميع المستخدمين إكمال MFA للمصادقة عبر هذا العميل |


تجاوز سياسة MFA لكل عميل
SSO للمؤسسات
يتيح SSO للمؤسسات لعملائك استخدام موفّر الهوية الخاص بهم. يدعم Authagonal كلًا من اتحاد SAML 2.0 وOIDC مع التوجيه القائم على النطاق، بحيث يُوجَّه المستخدمون تلقائيًا إلى موفّر الهوية الصحيح بناءً على عنوان بريدهم الإلكتروني.
التوجيه القائم على النطاق لـ SSO
اتصالات SAML 2.0
لإنشاء اتصال SAML، انتقل إلى صفحة SSO وحدّد علامة التبويب SAML. قدّم ما يلي:
| الحقل | الوصف |
|---|---|
connectionName | اسم مقروء للبشر لهذا الاتصال (مثل "Acme Corp Okta") |
entityId | معرّف كيان SP الخاص بك. سجّل هذه القيمة نفسها لدى IdP كمعرّف التطبيق (Entity ID)؛ ويجب أن تذكرها التأكيدات بوصفها Audience |
metadataUrl | عنوان URL لمستند XML لبيانات تعريف SAML الخاص بـ IdP |
metadataXml | XML لبيانات تعريف IdP ملصوق، من أجل IdP بلا عنوان URL لبيانات التعريف (Google Workspace) أو يتعذر الوصول إلى عنوانه من الإنترنت. قدّم هذا أو metadataUrl، وليس كليهما |
nameIdFormat | تنسيق NameID اختياري يُطلب من IdP. اتركه فارغًا للافتراضي emailAddress، أو اضبطه على "none" لإسقاط NameIDPolicy كليًا (موصى به مع ADFS) |
عند حفظ الاتصال، يجلب Authagonal وثيقة البيانات الوصفية ويستورد شهادة التوقيع الخاصة بموفّر الهوية، وعنوان URL لنقطة نهاية SSO، وصيغة معرّف الاسم. تُحدّث البيانات الوصفية دوريًا لالتقاط عمليات تدوير الشهادات.


إنشاء اتصال SSO بـ SAML 2.0
اتصالات OIDC
لإنشاء اتصال اتحاد OIDC، حدّد علامة التبويب OIDC وقدّم:
| الحقل | الوصف |
|---|---|
connectionName | اسم مقروء للبشر لهذا الاتصال |
discoveryUrl | عنوان اكتشاف OpenID Connect (مثل https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration) |
clientId | معرّف العميل المسجّل لدى موفّر الهوية الخارجي لهذا الاتحاد |
clientSecret | سر العميل لتسجيل موفّر الهوية الخارجي |


إنشاء اتصال اتحاد OIDC
التوجيه القائم على النطاق
يعيد التوجيه القائم على النطاق توجيه المستخدمين تلقائيًا إلى موفّر الهوية الصحيح بناءً على نطاق بريدهم الإلكتروني. عندما يُدخل مستخدم بريده الإلكتروني في صفحة تسجيل الدخول، يتحقق Authagonal مما إذا كان جزء النطاق (مثل acme.com) يطابق أي اتصال SSO مهيّأ. وإذا تطابق، يُعاد توجيه المستخدم بسلاسة إلى موفّر الهوية الخاص بمؤسسته.
| نطاق البريد الإلكتروني | موفّر SSO | البروتوكول |
|---|---|---|
| acme.com | Acme Corp Okta | SAML 2.0 |
| contoso.com | Contoso Azure AD | OIDC |
| example.org | Example OneLogin | SAML 2.0 |


يربط التوجيه القائم على النطاق نطاقات البريد الإلكتروني بموفّري الهوية
التدفق الذي يبدأه موفّر الخدمة (SP)
/saml/{connectionId}/login أو /oidc/{connectionId}/login.تزويد JIT
بشكل افتراضي، عندما يسجّل مستخدم الدخول عبر SSO لأول مرة ولم يكن موجودًا بالفعل في مستأجرك، ينشئ Authagonal حسابه تلقائيًا (التزويد الفوري Just-In-Time). يمكن تعطيل ذلك لكل اتصال عبر تحديد تعطيل تزويد JIT عند إنشاء الاتصال أو تحريره.
عند تعطيل تزويد JIT، لا يمكن تسجيل الدخول عبر ذلك الاتصال إلا للمستخدمين الذين تم تزويدهم مسبقًا، سواء عبر SCIM أو صفحة المستخدمين في البوابة أو الـ API. يتلقى المستخدمون غير المعروفين خطأ access_denied ويُوجَّهون للتواصل مع المسؤول الخاص بهم.
إعداد لكل اتصال
اختبر قبل الطرح
المستخدمون
تتيح لك صفحة المستخدمين إدارة جميع المستخدمين النهائيين في مستأجرك. يمكنك البحث عن المستخدمين، وعرض تفاصيلهم، وإنشاء حسابات جديدة، ومعرفة كيفية تزويد كل مستخدم.
البحث والترقيم
يدعم شريط البحث التصفية حسب عنوان البريد الإلكتروني أو معرّف المستخدم. يجري البحث بتأخير قدره 300 مللي ثانية بحيث تتحدّث النتائج أثناء الكتابة دون إثقال الـ API. تُرقَّم النتائج بمعدل 50 مستخدمًا لكل صفحة، استخدم عناصر التحكم في التنقل أسفل الجدول للانتقال بين الصفحات.
جدول المستخدمين
يعرض جدول المستخدمين الأعمدة التالية لكل مستخدم:
| العمود | الوصف |
|---|---|
| البريد الإلكتروني | عنوان البريد الإلكتروني للمستخدم، يُعرض مع شارة تحقق إذا تم تأكيد البريد الإلكتروني |
| معرّف المستخدم | المعرّف الفريد المخصّص للمستخدم |
| الاسم الكامل | الاسم الأول واسم العائلة مجتمعين |
| الحالة | Active أو Inactive ، يشير إلى ما إذا كان الحساب مُفعّلًا |
| MFA | Enabled أو Off ، ما إذا كانت المصادقة متعددة العوامل مُسجَّلة |
| المصدر | SCIM أو Local ، كيفية إنشاء المستخدم |
| تاريخ الإنشاء | تاريخ إنشاء حساب المستخدم |


قائمة المستخدمين مع شريط البحث والترقيم
إنشاء المستخدمين
انقر على إنشاء مستخدم لإضافة مستخدم محلي جديد. يتطلب النموذج ما يلي:
| الحقل | الوصف |
|---|---|
email | عنوان البريد الإلكتروني للمستخدم (يجب أن يكون فريدًا داخل المستأجر) |
password | كلمة المرور الأولية (8 أحرف كحد أدنى، ويجب أن تستوفي سياسة كلمات المرور الخاصة بمستأجرك) |
firstName | الاسم الأول للمستخدم |
lastName | اسم عائلة المستخدم |
language | اللغة المفضّلة. تحدّد لغة واجهة المستخدم والبريد الإلكتروني للمستخدم، وهي اختيارية وتعود افتراضيًا إلى الإنجليزية. |


إنشاء مستخدم محلي جديد
المستخدمون المُزوَّدون عبر SCIM
اللغة المفضّلة
لكل مستخدم لغة مفضّلة تتحكم في كل من واجهته المستضافة ورسائل البريد الإلكتروني الخاصة بالمعاملات التي يرسلها له Authagonal (التحقق، وإعادة ضبط كلمة المرور، والترحيب، وغير ذلك). يمكنك تعيينها عند إنشاء المستخدم وتغييرها في أي وقت من صفحة تفاصيل المستخدم. إذا لم تكن لدى المستخدم لغة مفضّلة محددة، يعود Authagonal افتراضيًا إلى الإنجليزية. يقدّم المُحدِّد جميع اللغات المدعومة: الإنجليزية، والألمانية، والفرنسية، والإسبانية، والبرتغالية، والفيتنامية، والصينية المبسّطة.


عيّن اللغة المفضّلة للمستخدم في صفحة التفاصيل
تفاصيل المستخدم
انقر على أي صف في قائمة المستخدمين لفتح صفحة تفاصيله. من هناك يمكنك تحرير بيانات الملف الشخصي، وإدارة الأدوار، وإعادة ضبط MFA، ومراجعة السمات المخصصة، وحذف المستخدم.


الملف الشخصي
حرّر البريد الإلكتروني، والاسم الأول/الأخير، والهاتف، والشركة، والمعرّف الخارجي، وبدّل علامة نشاط المستخدم. يجب أن تبقى تغييرات البريد الإلكتروني فريدة عبر المستأجر، ويُرجع الـ API email_in_use إذا كان مستخدمًا.
الأدوار
عيّن الأدوار المعرّفة في صفحة الأدوار وألغِ تعيينها. تظهر عضوية الأدوار في رموز الهوية والوصول عندما يكون لدى العميل includeRolesInTokens مفعّلًا.
المصادقة متعددة العوامل
اطّلع على كل بيانات اعتماد MFA المسجّلة للمستخدم، مثل تطبيق المصادقة (TOTP)، وWebAuthn/مفاتيح المرور، ورموز الاسترداد، لكل منها طوابعها الزمنية الخاصة بالتسجيل وآخر استخدام. أزِل بيانات اعتماد فردية، أو أعد ضبط جميع عوامل MFA. تجبر إعادة الضبط المستخدم على إعادة التسجيل عند تسجيل الدخول التالي.
السمات المخصصة
بيانات مفتاح/قيمة اعتباطية مرتبطة بالمستخدم. يجب أن تكون المفاتيح فريدة. تُكشف السمات عبر API الملف الشخصي للمستخدم وعبر SCIM، ويمكن ربطها بمطالبات رمز الوصول عبر تهيئة userClaims لنطاق مخصص.
حذف المستخدم
يزيل المستخدم وجميع بيانات اعتماد MFA الخاصة به نهائيًا. اكتب عنوان البريد الإلكتروني للمستخدم للتأكيد، فلا يمكن التراجع عن ذلك.
المجموعات
تتيح لك المجموعات تنظيم المستخدمين وتضمين عضوية المجموعة في الرموز. يمكن إنشاء المجموعات يدويًا في البوابة أو تزويدها تلقائيًا عبر SCIM من مزوّد هوية خارجي.
قائمة المجموعات
تعرض صفحة المجموعات جميع المجموعات في المستأجر الخاص بك مع المعلومات التالية:
| العمود | الوصف |
|---|---|
| اسم المجموعة | الاسم المعروض للمجموعة |
| الأعضاء | عدد المستخدمين الموجودين حاليًا في المجموعة |
| المصدر | SCIM أو Manual كيفية إنشاء المجموعة |
| تاريخ الإنشاء | تاريخ إنشاء المجموعة |


قائمة المجموعات مع مؤشرات المصدر
إنشاء مجموعة
انقر فوق إنشاء مجموعة وأدخِل displayName للمجموعة. ينبغي أن تكون أسماء المجموعات وصفية وفريدة داخل المستأجر الخاص بك (مثل "Engineering" و"Billing Admins" و"Beta Testers").
تفاصيل المجموعة والأعضاء
انقر فوق أي مجموعة لفتح عرض التفاصيل. هنا يمكنك رؤية جميع الأعضاء الحاليين وإدارة العضوية:
- إضافة أعضاء: أدخِل معرّف المستخدم لإضافة مستخدم إلى المجموعة.
- إزالة الأعضاء: انقر فوق زر الإزالة بجوار أي عضو لإزالته بشكل فردي.


إدارة عضوية المجموعة في عرض التفاصيل
المجموعات في الرموز
عند تفعيل includeGroupsInTokens على عميل، يتضمن رمز الهوية مطالبة groups تحتوي على عضويات المستخدم في المجموعات. يتضمن كل إدخال معرّف المجموعة id واسمها name:
{
"sub": "user-123",
"email": "[email protected]",
"groups": [
{ "id": "grp-001", "name": "Engineering" },
{ "id": "grp-002", "name": "Beta Testers" }
]
}التفعيل لكل عميل
includeGroupsInTokens على كل عميل على حدة. انتقل إلى الإعدادات العامة للعميل لتفعيله.الأدوار
تدعم الأدوار التحكم في الوصول المستند إلى الأدوار (RBAC) في تطبيقك. عرّف الأدوار في Authagonal، وخصّصها للمستخدمين، واستخدم مطالبة roles في الرموز لفرض التفويض في منطق تطبيقك.
إدارة الأدوار
تعرض صفحة الأدوار جدولًا بجميع الأدوار المعرّفة مع التحرير المباشر. لكل دور:
| العمود | الوصف |
|---|---|
| الاسم | معرّف فريد للدور (مثل "admin" و"editor" و"viewer") |
| الوصف | وصف مقروء يوضّح ما يمنحه الدور |
| تاريخ الإنشاء | تاريخ إنشاء الدور |
إنشاء دور
انقر فوق إنشاء دور وقدّم اسمًا ووصفًا. ينبغي أن تكون أسماء الأدوار موجزة وأن تتبع اصطلاح تسمية متسقًا عبر تطبيقك (مثل الأحرف الصغيرة مع الشرطات: billing-admin).
التحرير المباشر
تدعم الأدوار التحرير المباشر مباشرةً في الجدول. انقر فوق أيقونة القلم على أي دور للدخول إلى وضع التحرير، فتصبح حقول الاسم والوصف قابلة للتحرير. عدّل القيم، ثم انقر فوق أيقونة علامة الصح للحفظ. تسري التغييرات على الفور.
حذف دور
انقر فوق أيقونة الحذف على أي دور لإزالته. سيُطلب منك التأكيد قبل حذف الدور نهائيًا. لا تؤدي إزالة دور إلى إبطال الرموز الحالية بأثر رجعي، إذ سيغيب الدور عن الرموز الجديدة الصادرة بعد الحذف.


التحرير المباشر للأدوار في جدول الأدوار
الأدوار في الرموز
تُضمَّن الأدوار المخصصة لمستخدم كمطالبة roles في رمز الهوية. يمكن لتطبيقك قراءة هذه المطالبة لاتخاذ قرارات التفويض:
{
"sub": "user-123",
"email": "[email protected]",
"roles": ["admin", "billing-admin"]
}تزويد SCIM
يتيح SCIM 2.0 (نظام إدارة الهوية عبر النطاقات) التزويد التلقائي للمستخدمين والمجموعات من مزوّدي الهوية المؤسسية مثل Okta وAzure AD وOneLogin وJumpCloud. عند ضبطه، تُزامَن حسابات المستخدمين وعضويات المجموعات تلقائيًا من مزوّد الهوية الأعلى إلى المستأجر الخاص بك في Authagonal.
مزامنة دورة حياة مستخدم SCIM مع التزويد إلى الأنظمة التابعة
خطوات الإعداد
اتبع هذه الخطوات لتفعيل تزويد SCIM لعميل:
- اختر تطبيق العميل: اختر عميل OAuth الذي سيرتبط به تزويد SCIM.
- أنشئ رمز SCIM: قدّم وصفًا ومدة صلاحية بالأيام، ثم أنشئ الرمز.
- انسخ الرمز فورًا: تُعرض قيمة الرمز الخام مرة واحدة فقط. انسخها قبل إغلاق مربع الحوار.
- اضبط مزوّد الهوية لديك: في إعدادات SCIM لمزوّد الهوية، أدخِل عنوان URL الأساسي ورمز الحامل.
- اختبر مزامنة المستخدمين: شغّل مزامنة اختبارية من مزوّد الهوية وتحقق من ظهور المستخدمين في بوابة Authagonal.
عنوان URL الأساسي لـ SCIM
اضبط مزوّد الهوية لديك بعنوان URL الأساسي التالي:
https://{slug}.authagonal.io/scim/v2استبدل {slug} بسلَج المستأجر الخاص بك.


صفحة إعداد SCIM مع إنشاء الرموز
إدارة الرموز
تصادق رموز SCIM على طلبات التزويد الواردة من مزوّد الهوية لديك. يمكنك إدارة عدة رموز لكل عميل:
| الحقل | الوصف |
|---|---|
| الوصف | تسمية لتحديد الرمز (مثل "Okta Production SCIM") |
| انتهاء الصلاحية | عمر الرمز بالأيام (من 1 إلى 3650). اترك الحقل فارغًا أو اضبط قيمة طويلة للرموز التي لا ينبغي تدويرها بشكل متكرر. |
| الحالة | الرموز النشطة قيد الاستخدام. تعرض الرموز المُبطَلة شارة Revoked ولم يعد بإمكانها المصادقة على الطلبات. |
لإبطال رمز، انقر فوق زر إبطال المجاور له. تبقى الرموز المُبطَلة مرئية في القائمة لأغراض التدقيق لكنها تتوقف فورًا عن قبول الطلبات.


إدارة الرموز مع مؤشرات الرموز النشطة والمُبطَلة
انسخ الرمز فورًا
اختبار الاتصال
تحقق من أن تكامل SCIM لديك يعمل عبر الاستعلام عن نقطة نهاية ServiceProviderConfig:
curl -H "Authorization: Bearer YOUR_TOKEN" \ https://acme.authagonal.io/scim/v2/ServiceProviderConfig
تُعيد الاستجابة الناجحة مستند JSON يصف ميزات SCIM المدعومة، بما في ذلك العمليات المجمّعة والتصفية وإمكانية تغيير كلمة المرور.
اللغة المفضّلة
preferredLanguage (مع الرجوع إلى locale) بلغة المستخدم المخزّنة. يتلقى مستخدمو SSO المزوّدون عبر SCIM رسائل بريد إلكتروني مترجمة تلقائيًا باللغة التي يرسلها مزوّد الهوية لديهم.نطاقات OAuth
تتيح النطاقات للعملاء طلب شرائح محددة من بيانات المستخدم أو أذوناته. يدعم Authagonal نطاقات OIDC القياسية والنطاقات المخصصة التي تعرّفها لواجهات API الخاصة بك.
النطاقات المدمجة
| النطاق | الوصف |
|---|---|
openid | مطلوب لأي تدفق OpenID Connect. يُصدر رمز هوية. |
profile | يعيد مطالبات الملف الشخصي القياسية (name وgiven_name وfamily_name). |
email | يعيد عنوان البريد الإلكتروني للمستخدم وحالة التحقق منه. |
offline_access | يُصدر رمز تحديث إلى جانب رمز الوصول. |
النطاقات المخصصة
عرّف نطاقاتك الخاصة في صفحة النطاقات. يصف كل نطاق إذناً أو مورداً يمكن للعميل طلبه (على سبيل المثال، billing.read وorders.write).


| الحقل | الوصف |
|---|---|
name | معرّف النطاق المُرسَل في طلبات الرموز (مثل billing.read). |
displayName | تسمية مقروءة تظهر على شاشة الموافقة. |
description | شرح أطول يظهر أسفل اسم العرض عند الموافقة. |
userClaims | مطالبات إضافية تُضاف إلى رمز الوصول عند منح هذا النطاق. |
showInDiscoveryDocument | إذا كان مفعّلاً، يظهر النطاق في /.well-known/openid-configuration. |
emphasize | يُبرز النطاق على شاشة الموافقة باعتباره حسّاساً. |
required | يمنع المستخدم من إلغاء تحديد النطاق أثناء الموافقة. |
تكامل الموافقة
مطالبات مخصصة على الرموز
للمطالبات المخصصة شقّان. المصدر هو بيانات خاصة بكل مستخدم: لكل AuthUser قاموس customAttributes يمكنك تعبئته من البوابة (المستخدمون ← المستخدم ← السمات المخصصة) أو عبر SCIM أو عبر خطاف تزويد TCC. أما الإطلاق فهو خاص بكل نطاق: تسمّي قائمة userClaims لكل نطاق المفاتيح التي تسمح بمغادرتها للخادم.
عندما يطلب عميل نطاقات، يمرّ Authagonal على النطاقات الممنوحة، ويوحّد قوائم userClaims الخاصة بها، ولا يُصدر إلا تلك المفاتيح من customAttributes الخاصة بالمستخدم. وتُسقَط المفاتيح غير المعروفة بصمت، فلا يستطيع عميل قراءة سمة بتخمين اسمها. أما مطالبات OIDC القياسية (sub وemail وname وغيرها) فتتبع المواصفة ولا تخضع للقائمة البيضاء.
# 1. On the user (Portal → Users → {user} → Custom Attributes)
department = "engineering"
employee_id = "E-1042"
seat_tier = "enterprise"
# 2. On a custom scope (Portal → Scopes → projects.read)
name = "projects.read"
userClaims = ["department", "seat_tier"] # <-- whitelist
# 3. Client requests scope=openid projects.read
# Decoded access token (relevant fields only):
{
"sub": "u-9b…",
"scope": "openid projects.read",
"department": "engineering",
"seat_tier": "enterprise"
// employee_id is NOT emitted — it's not in the whitelist for any granted scope.
}مطالبات الفيدرالية تتجاوز الإعداد لكل جلسة
department المُطابَقة من تأكيد SAML، تمرّ عبر القائمة البيضاء للنطاقات نفسها لكنها تغلب عند تعارض المفاتيح على customAttributes المُخزّنة. وتُصدر على رموز هذه الجلسة (وتبقى عبر دورات التحديث) دون أن تُكتب مرة أخرى في سجل المستخدم.إسناد النطاقات إلى العملاء
أضف النطاقات المسموح بها في تبويب العملاء ← النطاقات & المنح. لا يمكن للعميل طلب سوى النطاقات الممنوحة له؛ وتُرفض النطاقات غير المعروفة بـ invalid_scope.
العلامة التجارية
خصّص مظهر صفحات تسجيل الدخول الخاصة بالمستأجر وأسلوبها. تتيح لك إعدادات العلامة التجارية مطابقة تجربة المصادقة مع الهوية البصرية لمنتجك، من الشعارات والألوان إلى تجاوزات CSS المتقدمة.
المظهر
| الإعداد | الوصف |
|---|---|
appName | اسم التطبيق المعروض في ترويسة صفحة تسجيل الدخول وعلامة تبويب المتصفح |
logoUrl | عنوان URL لصورة شعارك. يُعرض في أعلى صفحة تسجيل الدخول. الحجم الموصى به: 200×60 بكسل أو نسبة أبعاد مماثلة. |
primaryColor | لون العلامة التجارية الأساسي المستخدم للأزرار والروابط وحالات التركيز. يُضبط عبر منتقي الألوان أو إدخال قيمة سداسية عشرية. تُحدَّث المعاينة المباشرة أثناء تغييرك للقيمة. |
customCssUrl | عنوان URL لملف CSS خارجي يُحمَّل بعد الأنماط الافتراضية. استخدمه لتجاوزات الأنماط المتقدمة. |


إعدادات المظهر مع معاينة مباشرة للألوان
معلومات الاتصال
| الإعداد | الوصف |
|---|---|
supportEmail | عنوان بريد إلكتروني للدعم يُعرض على صفحات تسجيل الدخول. يراه المستخدمون عندما يحتاجون إلى مساعدة بشأن حساباتهم. |
مفاتيح تبديل صفحة تسجيل الدخول
تحكّم في العناصر التي تظهر على صفحة تسجيل الدخول الخاصة بالمستأجر:
| التبديل | الوصف | الافتراضي |
|---|---|---|
showForgotPassword | إظهار رابط "نسيت كلمة المرور؟" في نموذج تسجيل الدخول | مُفعّل |
showRegistration | إظهار رابط "إنشاء حساب" لتسجيل المستخدمين بالخدمة الذاتية | مُفعّل |
showPoweredBy | إظهار شارة "Powered by Authagonal" في أسفل صفحة تسجيل الدخول | مُفعّل |


مثال على صفحة تسجيل دخول مع تطبيق علامة تجارية مخصصة
CSS مخصص
للتحكم الكامل في مظهر صفحة تسجيل الدخول، قدّم عنوان URL لملف CSS في إعدادات علامتك التجارية. يُحمَّل الملف بعد الأنماط الافتراضية، لذا تكون الأولوية لقواعدك.
خصائص CSS المخصصة
| المتغير | الوصف | الافتراضي |
|---|---|---|
--auth-bg | لون خلفية الصفحة | #f3f4f6 |
--auth-card-bg | خلفية بطاقة تسجيل الدخول | white |
--auth-heading | لون نص العنوان | #111827 |
--auth-radius | نصف قطر حدود البطاقة | 0.5rem |
--auth-font | عائلة الخط | inherit |
الوضع الداكن
يأتي تطبيق تسجيل الدخول بسمات فاتحة وداكنة وتابعة للنظام. يختار المستخدمون من مفتاح تبديل على صفحة تسجيل الدخول، ويستمر الاختيار عبر الجلسات. عند الضبط على system، يتتبع التطبيق أحادي الصفحة قيمة prefers-color-scheme بشكل مباشر.
تُعلَن القيم الفاتحة عند :root، وتُحصر التجاوزات الداكنة ضمن .dark. تكون الأولوية دائمًا للعلامة التجارية للمستأجر المضبوطة عبر customCssUrl، لذا تستمر ألوانك بغض النظر عن سمة المستخدم.
محدِّدات العناصر
data-auth. هذه المحدِّدات مستقرة عبر التحديثات، فلن تتعطل عند تغييرنا لأسماء الفئات الداخلية.| المحدِّد | العنصر |
|---|---|
[data-auth="page"] | حاوية خلفية الصفحة الكاملة |
[data-auth="header"] | منطقة الشعار واسم التطبيق |
[data-auth="logo"] | صورة الشعار |
[data-auth="app-name"] | عنوان اسم التطبيق (عند عدم ضبط شعار) |
[data-auth="content"] | منطقة المحتوى الرئيسية (النماذج والرسائل) |
[data-auth="login-form"] | عنصر نموذج تسجيل الدخول |
[data-auth="email-field"] | غلاف حقل إدخال البريد الإلكتروني |
[data-auth="password-field"] | غلاف حقل إدخال كلمة المرور |
[data-auth="submit-button"] | زر تسجيل الدخول |
[data-auth="languages"] | شريط منتقي اللغة |
الإعدادات
اضبط سياسات الأمان على مستوى المستأجر وخطافات الويب وإعدادات البيئة. تنطبق هذه الإعدادات عالميًا عبر جميع العملاء ما لم تُتجاوز على مستوى العميل.
سياسة كلمات المرور
حدّد متطلبات تعقيد كلمات المرور لجميع المستخدمين في المستأجر الخاص بك:
| الإعداد | النطاق | الافتراضي |
|---|---|---|
minPasswordLength | 6 – 128 | 8 |
requireUppercase | مُفعّل / معطّل | مُفعّل |
requireLowercase | مُفعّل / معطّل | مُفعّل |
requireDigit | مُفعّل / معطّل | مُفعّل |
requireSpecialChar | مُفعّل / معطّل | مُفعّل |


ضبط سياسة كلمات المرور
سياسة MFA
تحدّد سياسة MFA على مستوى المستأجر السلوك الافتراضي للمصادقة متعددة العوامل. يمكن للعملاء الأفراد تجاوز هذا الإعداد.
| السياسة | السلوك |
|---|---|
Disabled | MFA غير متاحة. لا يمكن للمستخدمين التسجيل في MFA. |
Enabled | MFA اختيارية. يمكن للمستخدمين اختيار التسجيل وسيُطلَب منهم إدخالها عند تسجيل الدخول إذا كانوا مسجَّلين. |
Required | MFA إلزامية. يجب على جميع المستخدمين التسجيل في MFA وإكمال العامل الثاني في كل تسجيل دخول. |
الجلسة والإقفال
تحكّم في مدة الجلسة وسلوك إقفال الحساب:
| الإعداد | النطاق | الافتراضي |
|---|---|---|
sessionLifetimeMinutes | 5 – 43,200 (30 يومًا) | 60 |
maxFailedAttempts | 1 – 100 | 5 |
lockoutDurationMinutes | 1 – 1,440 (24 ساعة) | 10 |


ضبط الجلسة والإقفال
خطافات الويب
تتيح لك خطافات الويب التفاعل مع أحداث المصادقة في الوقت الفعلي. هناك حدثان (onUserAuthenticated وonTokenIssued) قابلان للفرض، فهما يُطلَقان افتراضيًا بشكل غير متزامن ولا يحجبان المستخدم، لكن يمكنك اختيار الفرض لكل حدث بحيث ترفض الإجراءَ استجابةٌ خارج نطاق 2xx أو جسمُ {"allow": false}. أما الأحداث المتبقية فهي إشعارات تُطلَق دائمًا بأسلوب إطلاق ونسيان، ولا تحجب أبدًا.
| الحدث | النوع | الوصف |
|---|---|---|
onUserAuthenticated | قابل للفرض | يُطلَق بعد تسجيل دخول ناجح. يكون افتراضيًا بأسلوب إطلاق ونسيان حتى لا يتأثر زمن استجابة تسجيل الدخول. بدّل <code>webhookEnforceUserAuthenticated</code> لجعله حاجبًا، فعندئذٍ ترفض تسجيلَ الدخول استجابةٌ خارج نطاق 2xx أو جسمُ <code>{"allow": false}</code>. |
onTokenIssued | قابل للفرض | يُطلَق قبل سَكّ الرموز (authorization_code وrefresh_token وclient_credentials). يكون افتراضيًا بأسلوب إطلاق ونسيان. بدّل <code>webhookEnforceTokenIssued</code> لجعله حاجبًا، فعندئذٍ تمنع إصدارَ الرمز استجابةٌ خارج نطاق 2xx أو جسمُ <code>{"allow": false}</code>. |
onUserCreated | إشعار | إشعار بأسلوب إطلاق ونسيان عند تسجيل مستخدم جديد أو تزويده عبر SCIM. |
onUserUpdated | إشعار | إشعار بأسلوب إطلاق ونسيان عند تحديث سجل مستخدم (تغييرات الملف الشخصي، تغييرات الأدوار، تحديثات SCIM). |
onUserDeleted | إشعار | إشعار بأسلوب إطلاق ونسيان عند حذف مستخدم، سواء عبر البوابة/SCIM أو بحكم سياسة الاحتفاظ. |
onLoginFailed | إشعار | إشعار بأسلوب إطلاق ونسيان عند فشل محاولة تسجيل دخول بسبب بيانات اعتماد خاطئة أو إقفال أو رفض من السياسة. |
إعدادات إضافية لخطافات الويب:
| الإعداد | النطاق | الافتراضي | الوصف |
|---|---|---|---|
webhookTimeoutSeconds | 1 – 30 | 5 | أقصى مدة انتظار لاستجابة خطاف ويب خاص بالفرض قبل انتهاء المهلة |
webhookFailOpen | مُفعّل / معطّل | مُفعّل | عند التفعيل، إذا تعذّر الوصول إلى خطاف ويب خاص بالفرض أو انتهت مهلته، يُسمح بمتابعة العملية |


ضبط أحداث خطاف الويب
توفر خطاف الويب الخاص بالفرض
webhookFailOpen معطّلًا، فلن يتمكن أي مستخدم من تسجيل الدخول. استخدم وضع الفشل المفتوح ما لم تكن لديك متطلبات امتثال صارمة تفرض الحجب عند فشل خطاف الويب.التحقق من خطافات الويب
بمجرد ضبط أي عنوان URL لخطاف ويب، يَسُكّ Authagonal سرّ توقيع خاصًا بكل مستأجر (قيمة whsec_… تُعرض للقراءة فقط ضمن الإعدادات ← خطافات الويب). يحمل كل تسليم صادر ترويسة X-Authagonal-Signature: t=<unix>,v1=<hex>، حيث يكون v1 هو HMAC-SHA256(secret, "{t}.{body}") محسوبًا على جسم الطلب الخام. أعِد حسابه على نقطة النهاية لديك وقارنه بزمن ثابت للتأكد من أن الطلب وارد فعلًا من Authagonal ولم يُعبَث به، وارفض عمليات التسليم التي تكون قيمة t فيها قديمة جدًا لمنع هجمات إعادة التشغيل.
import crypto from 'node:crypto';
// rawBody MUST be the exact bytes Authagonal sent — verify before any JSON re-serialization.
function verifyAuthagonalWebhook(signatureHeader, rawBody, signingSecret) {
const parts = Object.fromEntries(signatureHeader.split(',').map((p) => p.split('=')));
const { t, v1 } = parts;
// Replay protection: reject deliveries older than 5 minutes.
if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
const expected = crypto
.createHmac('sha256', signingSecret)
.update(`${t}.${rawBody}`)
.digest('hex');
return v1.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}تدوير سرّ التوقيع
نافذة الصيانة
حدّد نافذة صيانة مفضّلة للعمليات المعطِّلة مثل تدوير الشهادات وتحديثات البنية التحتية. اختر ساعة بتوقيت UTC (من 0 إلى 23)، وتعرض البوابة أيضًا التوقيت المكافئ في منطقتك الزمنية المحلية للتيسير.
بيئة الاختبار
بيئة الاختبار هي نسخة كاملة من مستأجر الإنتاج الخاص بك، متاحة على عنوان URL منفصل. استخدمها لاختبار تغييرات الإعداد وتكاملات SSO ونقاط نهاية خطافات الويب دون التأثير على المستخدمين الفعليين.
| الإجراء | الوصف |
|---|---|
| تفعيل بيئة الاختبار | ينشئ نسخة بيئة اختبار من مستأجر الإنتاج الخاص بك. عنوان URL لبيئة الاختبار هو سلَج المستأجر مع اللاحقة -sandbox. |
| تحديث من البيئة الفعلية | يزامن بيئة الاختبار مع إعدادات الإنتاج وبيانات المستخدمين الحالية. |
| تعطيل بيئة الاختبار | يحذف بيئة الاختبار وجميع بياناتها نهائيًا. |
يمكن الوصول إلى بيئة الاختبار على {slug}-sandbox.authagonal.io.


عناصر التحكم في بيئة الاختبار
الفوترة
أدِر اشتراكك وفوترتك عبر صفحة الفوترة في البوابة. تمنحك هذه الصفحة نظرة عامة على خطتك الحالية وتتيح لك الوصول إلى بوابة فوترة Stripe لإدارة طرق الدفع والفواتير وتغييرات الخطة.
معلومات الاشتراك
تعرض صفحة الفوترة تفاصيل اشتراكك الحالي بنظرة واحدة. سترى شارة حالة تشير إلى وضع اشتراكك (active أو trialing أو past_due أو canceled أو unpaid)، إلى جانب اسم خطتك وفترة الفوترة الحالية (تاريخا البدء والانتهاء) وما إذا كان اشتراكك مضبوطًا للإلغاء في نهاية الفترة الحالية.
إدارة الاشتراك
انقر فوق زر إدارة الاشتراك لفتح بوابة فوترة Stripe في نافذة جديدة. من هناك يمكنك تحديث طرق الدفع، وعرض الفواتير وتنزيلها، وتغيير خطتك، أو إلغاء اشتراكك.
إذا لم يكن هناك اشتراك بعد، يظهر بدلًا من ذلك زر دعوة لاتخاذ إجراء إعداد الفوترة، يرشدك خلال اختيار خطة وإدخال تفاصيل الدفع.


تعرض صفحة الفوترة تفاصيل اشتراكك الحالي وتتيح الوصول إلى Stripe
أمان الدفع
النطاقات المخصصة
قدّم صفحات المصادقة من نطاقك الخاص (مثل auth.yourdomain.com) بدلاً من النطاق الافتراضي {slug}.authagonal.io. تمنح النطاقات المخصصة مستخدميك تجربة مصادقة سلسة تحمل علامتك التجارية.
إضافة نطاق
أدخل اسم المضيف الذي تريد استخدامه في نموذج إضافة النطاق (مثل auth.yourdomain.com). بمجرد إضافته، سيظهر النطاق في قائمة نطاقاتك بحالة pending_verification.
التحقق عبر DNS
أنشئ سجل CNAME يوجّه نطاقك إلى {slug}.authagonal.io. بمجرد إضافة سجل DNS، انقر على تحقق للتأكد من انتشار DNS.
auth.yourdomain.com. CNAME acme.authagonal.io.
انتشار DNS
شهادات TLS
بمجرد التحقق من نطاقك، تحتاج إلى شهادة TLS كي يتمكن المستخدمون من الاتصال بأمان عبر HTTPS. يدعم Authagonal خيارين:
تلقائي (cert-manager) يوفّر Authagonal شهادات TLS ويجدّدها تلقائياً باستخدام cert-manager. هذا هو الخيار الموصى به لمعظم المستخدمين، ولا يتطلب أي إعداد إضافي.
أحضر شهادتك الخاصة (BYO) ارفع شهادتك ومفتاحك الخاص بصيغة PEM. هذا الخيار مفيد إذا كانت مؤسستك تتطلب شهادات من جهة إصدار شهادات محددة. ويتم تتبّع انتهاء صلاحية الشهادة كي تتمكن من تجديدها قبل انقضائها.
حالة النطاق
يعرض كل نطاق شارة حالة تشير إلى وضعه الحالي: pending_verification (لم يُؤكَّد DNS بعد)، أو verified (تم تأكيد DNS وما زال TLS قيد الانتظار)، أو active (يعمل بالكامل)، أو failed (تم اكتشاف مشكلة في الإعداد).


تعرض قائمة النطاقات كل نطاق مخصص وحالته الحالية


ارفع شهادة TLS ومفتاحك الخاص بصيغة PEM
تجديد شهادة BYO
إعداد البريد الإلكتروني
اضبط طريقة إرسال المستأجر الخاص بك للرسائل البريدية المعاملاتية، مثل التحقق وإعادة تعيين كلمة المرور وإشعارات MFA. اختر بين المرسِل المشترك الافتراضي، أو نطاق مخصص مُتحقَّق منه عبر Resend، أو خادم SMTP الخاص بك.


الرسائل البريدية المترجَمة
تُرسَل الرسائل البريدية المعاملاتية بلغة المستلِم المفضّلة. تُصمَّم قوالب رسائل التحقق وإعادة تعيين كلمة المرور وتنبيه وجود الحساب والترحيب والفوترة ودعوة المسؤول بسبع لغات: الإنجليزية والألمانية والفرنسية والإسبانية والبرتغالية والفيتنامية والصينية المبسّطة. وعند عدم توفر قالب بلغة المستلِم، يعود البريد إلى الإنجليزية.
تُحدَّد اللغة من تفضيل المستلِم المخزَّن عند الإرسال. ويمكن أن يأتي هذا التفضيل من عدة مصادر:
- التسجيل وإنشاء الحساب يُلتقط من اللغة التي اختارها المستخدم على شاشات تسجيل الدخول المُستضافة.
- صفحة المستخدمين في البوابة يضبطها المسؤول عند إنشاء مستخدم أو تعديله.
- التزويد عبر SCIM يُحدَّد من
preferredLanguageالخاص بمزوّد الهوية عند مزامنة المستخدمين عبر SSO. - صفحة الحساب ذاتية الخدمة يختارها المستخدم بنفسه عبر
/login/account.
لا حاجة إلى أي إعداد
مزوّدو البريد الإلكتروني
| المزوّد | الوصف | الإعداد |
|---|---|---|
| Default | تُرسَل الرسائل من [email protected] باستخدام بنية Resend المشتركة لدينا. | لا حاجة إلى أي إعداد، يعمل مباشرةً وبشكل جاهز. |
| Resend Custom Domain | تُرسَل الرسائل من نطاقك الخاص المُتحقَّق منه عبر Resend. | سجّل نطاقك، وأضف سجلات DNS، وتحقق من الملكية. |
| Custom SMTP | تُرسَل الرسائل عبر خادم SMTP الخاص بك. | قدّم مضيف SMTP والمنفذ وبيانات الاعتماد وإعدادات TLS. |
هوية المرسِل
بريد المرسِل واسمه مشتركان عبر جميع أوضاع المزوّدين. بريد المرسِل مطلوب؛ ويعود اسم المرسِل إلى اسم المستأجر عند تركه فارغاً.
| الحقل | الوصف |
|---|---|
senderEmail | عنوان "من" في الرسائل الصادرة. يجب أن يكون على نطاق مُتحقَّق منه في وضع نطاق Resend المخصص. |
senderName | الاسم المعروض في صندوق وارد المستلِم. |
نطاق Resend المخصص
تحقق من نطاق الإرسال الخاص بك مع Resend مرة واحدة، ثم استخدمه كعنوان "من" لهذا المستأجر. تُوفَّر سجلات DNS من نوع TXT (SPF وDKIM) عبر صفحة النطاقات، ويتحقق منها Resend تلقائياً.
SMTP مخصص
أحضر خادم SMTP الخاص بك، وهو مفيد لعمليات الترحيل الداخلية، أو للمزوّدين غير المشمولين بـ Resend، أو للتثبيت التنظيمي.
| الحقل | الوصف |
|---|---|
host | اسم مضيف خادم SMTP (مثل smtp.example.com). |
port | منفذ الاتصال. 587 لـ STARTTLS، و465 لـ TLS الضمني، و25 لعمليات الترحيل الداخلية غير المصادَق عليها. |
username | اسم مستخدم المصادقة (اختياري، اتركه فارغاً لعمليات الترحيل غير المصادَق عليها). |
password | كلمة مرور المصادقة. تُخزَّن مشفّرة في سر إعدادات المستأجر. |
useTls | اشترط TLS. اتركه مُفعَّلاً ما لم تكن تستهدف عملية ترحيل داخلية موثوقة. |
نطاق إرسال مخصص
عند استخدام مزوّد Resend، يمكنك تسجيل نطاقك الخاص كي تصدر الرسائل من علامتك التجارية (مثل [email protected]) بدلاً من @authagonal.io.
- اذهب إلى الإعدادات ← البريد الإلكتروني واختر مزوّد Resend بنطاق مخصص.
- أدخل اسم نطاقك وانقر على تسجيل.
- أضف سجلات DNS المعروضة (DKIM وSPF ومسار الإرجاع) إلى DNS الخاص بنطاقك.
- انقر على التحقق من الإثبات، وبمجرد انتشار DNS (عادةً خلال 1 إلى 10 دقائق)، ستتغير حالة النطاق إلى مُتحقَّق منه.
انتشار DNS
الاختبار
استخدم زر إرسال بريد اختباري في الإعدادات ← البريد الإلكتروني للتحقق من إعدادك. سيُرسَل بريد اختباري إلى عنوان بريد المسؤول الخاص بك باستخدام الإعدادات المحفوظة حالياً.
سجل التدقيق
يوفّر سجل التدقيق سجلاً للقراءة فقط لجميع الإجراءات الإدارية التي تُنفَّذ على المستأجر الخاص بك. يُلتقط كل تغيير يُجرى عبر البوابة أو API مع سياقه الكامل، ما يمنحك مساراً متكاملاً للامتثال واستكشاف الأخطاء وإصلاحها.
أعمدة السجل
| العمود | الوصف |
|---|---|
| الطابع الزمني | تاريخ ووقت وقوع الإجراء |
| المنفِّذ | عنوان البريد الإلكتروني للمسؤول الذي نفّذ الإجراء، أو "system" للإجراءات الآلية |
| الإجراء | نوع الإجراء المنفَّذ (مثل: إنشاء عميل، تحديث الإعدادات) |
| الكيان | هدف الإجراء بصيغة type:id (مثل: client:my-app) |
| التفاصيل | سياق إضافي حول التغيير |
الإجراءات المتتبَّعة
تُسجَّل الإجراءات الإدارية التالية في سجل التدقيق:
| الفئة | الإجراءات |
|---|---|
| العملاء | إنشاء عميل، تحديث عميل، حذف عميل |
| اتصالات SSO | إنشاء اتصال SAML، حذف اتصال SAML، إنشاء اتصال OIDC، حذف اتصال OIDC |
| المستخدمون | إنشاء مستخدم، تحديث مستخدم |
| الإعدادات | تحديث الإعدادات، تحديث العلامة التجارية |
| النطاقات | إضافة نطاق، التحقق من نطاق، حذف نطاق |
| SCIM | إنشاء رمز SCIM، إبطال رمز SCIM |
| الأدوار | إنشاء دور، تحديث دور، حذف دور |
| المجموعات | إنشاء مجموعة، حذف مجموعة |
| الفريق | دعوة عضو فريق، إزالة عضو فريق |


يوفّر سجل التدقيق سجلاً متكاملاً لجميع الإجراءات الإدارية
الاحتفاظ
النسخ الاحتياطي
ينشئ Authagonal نسخاً احتياطية من بيانات المستأجر الخاص بك تلقائياً وفق جدول يعمل كل ساعة. تشمل النسخ الاحتياطية جميع المستخدمين والمجموعات والأدوار والعملاء واتصالات SSO ورموز SCIM والعلامة التجارية والإعدادات. ويمكنك عرض سجل النسخ الاحتياطي وتنزيل أحدث نسخة احتياطية كاملة من صفحة النسخ الاحتياطي.


كيف يعمل النسخ الاحتياطي
- تُجرى نسخة احتياطية كاملة مرة واحدة يومياً، تلتقط كل جدول في جزء التخزين الخاص بالمستأجر لديك.
- تُجرى النسخ الاحتياطية التزايدية كل ساعة، وتلتقط فقط الصفوف التي تغيّرت منذ آخر نسخة احتياطية.
- تُخزَّن النسخ الاحتياطية في Azure Blob Storage بالهوية المُدارة نفسها التي يستخدمها المستأجر الخاص بك.
- تُتتبَّع السجلات المحذوفة عبر علامات الحذف وتُدرَج في النسخ الاحتياطية اكتمالاً للتدقيق.
تنزيل النسخ الاحتياطية
انقر على تنزيل الأحدث للحصول على ملف ZIP يحتوي على أحدث نسخة احتياطية كاملة مدمجة مع جميع النسخ الاحتياطية التزايدية اللاحقة. يُصدَّر كل جدول كملف JSONL (كائن JSON واحد لكل سطر).
صيغة النسخ الاحتياطي
تطبيقات التزويد
تتلقى تطبيقات التزويد إشعارات خطاف الويب (webhook) في الوقت الفعلي عند إنشاء المستخدمين أو مصادقتهم في المستأجر الخاص بك. يتيح هذا للأنظمة اللاحقة إعداد الحسابات تلقائياً، أو تعيين التراخيص، أو مزامنة بيانات المستخدمين دون تدخل يدوي.
كيف يعمل
عند وقوع حدث متعلق بمستخدم (إنشاء أو مصادقة)، يستدعي Authagonal عنوان رد النداء (callback URL) الخاص بتطبيق التزويد لديك باستخدام نمط TCC (محاولة/تأكيد/إلغاء). يضمن هذا النهج ثلاثي المراحل تزويداً موثوقاً عبر عدة أنظمة لاحقة:
| المرحلة | نقطة النهاية | الغرض |
|---|---|---|
| /try | POST {callbackUrl}/try | يتحقق مما إذا كان بإمكان التطبيق التعامل مع المستخدم. أعِد 200 للقبول أو 4xx للرفض. |
| /confirm | POST {callbackUrl}/confirm | يثبّت العملية بعد أن تكون جميع التطبيقات قد قبلت مرحلة /try. |
| /cancel | POST {callbackUrl}/cancel | يتراجع عن العملية إذا فشل تطبيق آخر أثناء مرحلة /try. |
حمولة خطاف الويب
يتضمن كل طلب خطاف ويب حمولة JSON تحتوي على الحقول التالية:
| الحقل | النوع | الوصف |
|---|---|---|
| event | string | نوع الحدث (مثل: user.created، user.authenticated) |
| userId | string | المعرّف الفريد للمستخدم |
| string | عنوان البريد الإلكتروني للمستخدم | |
| name | string | الاسم المعروض للمستخدم |
| tenantId | string | معرّف المستأجر الخاص بك |
| timestamp | string | طابع زمني بصيغة ISO 8601 للحدث |
إضافة تطبيق تزويد
لإضافة تطبيق تزويد، قدّم اسماً وعنوان رد نداء (callback URL) ومفتاح API اختيارياً. يُرسَل مفتاح API كرمز Bearer في ترويسة Authorization لكل طلب خطاف ويب، ما يتيح لتطبيقك مصادقة الطلبات الواردة من Authagonal.
الاختبار
انقر على اختبار بجوار أي تطبيق تزويد لإرسال طلب اختباري إلى عنوان رد النداء الخاص بك. تعرض نتائج الاختبار رمز حالة HTTP ومحتوى الاستجابة، ما يساعدك على التأكد من أن تطبيقك يستقبل خطافات الويب ويعالجها بشكل صحيح.


اختبر تطبيقات التزويد للتحقق من تسليم خطاف الويب ومعالجة الاستجابة
حدود الخطة
يمكن ضبط الحد الأقصى لعدد تطبيقات التزويد لكل مستأجر، بحد افتراضي قدره 6. ويمكن للمسؤول تعديل هذا الحد إذا كان سير عملك يتطلب أهداف تزويد إضافية.
مصادقة مفتاح API
الفريق
تدير صفحة الفريق مسؤولي البوابة، وهم الأشخاص الذين يمكنهم الوصول إلى المستأجر الخاص بك وإعداده عبر بوابة الإدارة. يتمتع جميع أعضاء الفريق بصلاحية إدارية كاملة على كل جانب من جوانب إعداد المستأجر لديك.
قائمة المسؤولين
تعرض قائمة المسؤولين اسم كل عضو في الفريق وعنوان بريده الإلكتروني وتاريخ إضافته. ويظهر مؤشر "أنت" بجوار صف المستخدم الحالي كي يسهل عليك تمييز حسابك الخاص.
دعوة المسؤولين
لدعوة عضو جديد في الفريق، قدّم عنوان بريده الإلكتروني واسمه وكلمة مرور مؤقتة (8 أحرف كحد أدنى). يسجّل المستخدم المدعوّ الدخول بكلمة المرور المؤقتة، وينبغي له تغييرها عند أول تسجيل دخول.
حقول الدعوة
تُنشئ دعوات المسؤولين مستخدماً مُزوَّداً بالكامل، دون حاجة إلى تبادل رسائل بريدية.
| الحقل | الوصف |
|---|---|
email | عنوان البريد الإلكتروني للمسؤول الجديد. يجب أن يكون فريداً ضمن المستأجر. |
name | الاسم المعروض في قائمة المسؤولين. |
tempPassword | كلمة المرور المؤقتة التي يستخدمها المدعوّ عند أول تسجيل دخول. سيُطلب منه تغييرها. اتركها فارغة لإنشائها تلقائياً وإرسالها عبر البريد الإلكتروني. |
إزالة المسؤولين
انقر على إزالة بجوار أي عضو في الفريق لإلغاء صلاحية وصوله. يظهر مربع حوار للتأكيد قبل إتمام الإزالة. ولا يمكنك إزالة نفسك، إذ يجب أن يبقى مسؤول واحد على الأقل في الفريق دائماً.


إدارة مسؤولي البوابة من صفحة الفريق
لا يوجد دور مالك
الدعم
افتح تذكرة دعم مع فريق Authagonal دون مغادرة البوابة. كل تذكرة هي محادثة مترابطة، كي تبقى أنت وفريقنا على الصفحة نفسها من أول إبلاغ حتى الحل.
تذاكرك
تعرض صفحة الدعم كل تذكرة طرحتها، مع ترتيب الأحدث نشاطاً أولاً. استخدم شارة الحالة لترى بلمحة ما الذي ينتظر ردك وما الذي ينتظر ردنا.


تذاكر الدعم الخاصة بك مع الموضوع والحالة والأولوية وآخر نشاط
- يعرض كل صف الموضوع والحالة الحالية (مفتوحة، أو قيد الانتظار، أو محلولة، أو مغلقة) والأولوية ووقت آخر نشاط.
- انقر على تذكرة جديدة لفتح واحدة، ثم امنحها موضوعاً وأولوية ورسالتك الأولى.
- تسهّل شارات الحالة المُرمَّزة بالألوان مسح القائمة بحثاً عن التذاكر التي تحتاج إلى انتباهك.
سلسلة التذكرة
يعرض فتح التذكرة المحادثة كاملةً. تُنشَر الردود بالترتيب، وتظهر الرسائل الجديدة من فريقنا دون إعادة تحميل الصفحة.


سلسلة تذكرة بينك وبين فريق Authagonal
- تُعرَض الرسائل المترابطة بينك وبين فريق Authagonal بترتيب زمني.
- رُدّ ضمن السلسلة وأرفق ملفات لمشاركة السجلات أو لقطات الشاشة أو الإعدادات.
- تتحدّث السلسلة مباشرةً، فيظهر رد فريقنا فور إرساله.
- وإذا رددت على بريد الإشعار بدلاً من ذلك، تُدرَج رسالتك في السلسلة تلقائياً.
كيف تصلك الردود
الاستيراد والترحيل
رحّل نظام هوية قائماً إلى مستأجر Authagonal الخاص بك. يُدعم مصدران، Duende IdentityServer (قاعدة بيانات SQL Server) وAuth0 (Management API). ويُجري كلٌّ منهما معاينة للقراءة فقط لتراجع بدقة ما الذي سيُنسخ قبل الالتزام.
الاستيراد من Duende IdentityServer
رحّل العملاء والنطاقات والمستخدمين والأدوار من قاعدة بيانات SQL Server قائمة لـ Duende IdentityServer إلى مستأجر Authagonal الخاص بك. يُجرى الاستيراد على مرحلتين، المعاينة ثم الالتزام، بحيث يمكنك مراجعة ما سيُنسخ قبل إجراء أي تغييرات.
ما الذي يُستورد
يقرأ أداة الاستيراد من جدول ConfigurationDb الخاص بـ Duende ومن جداول ASP.NET Identity، ويكتب الصفوف المُطابَقة في مستأجرك. أما العناصر قصيرة العمر مثل المنح المُخزّنة ورموز الأجهزة ومفاتيح التوقيع فيُتجاوز عنها.
| الكيان | الجداول المصدر | ملاحظات |
|---|---|---|
| العملاء | Clients, ClientSecrets, ClientGrantTypes, ClientScopes, ClientRedirectUris | تُستورد العملاء المعطّلون بحالة معطّلة. ويُتجاوز عن الأسرار المنتهية الصلاحية. |
| النطاقات | ApiScopes, ApiResources, IdentityResources | تُحفظ تعيينات مطالبات المستخدم حيثما أمكن التعرّف عليها. |
| المستخدمون | AspNetUsers, AspNetUserClaims | تُنسخ تجزئات كلمات المرور (ASP.NET Identity V3) كما هي وتُعاد تجزئتها عند أول تسجيل دخول. |
| الأدوار | AspNetRoles, AspNetUserRoles | تُحفظ إسنادات الأدوار. |
| تسجيلات الدخول الخارجية | AspNetUserLogins | تُخزَّن للرجوع إليها؛ أعد ربط موفّري الهوية الأصليين عبر SSO بعد الاستيراد. |
المعاينة قبل الالتزام
الصق سلسلة اتصال ConfigurationDb / IdentityDb الخاصة بـ Duende ثم انقر تشغيل المعاينة. تفتح المعاينة اتصالاً للقراءة فقط وتُحصي كل صف سيُستورَد، دون حدوث أي عمليات كتابة.
- أعداد الكيانات للعملاء والنطاقات والمستخدمين والأدوار وإسنادات الأدوار.
- تحذيرات الكتابة فوق البيانات عندما يحتوي المستأجر الهدف بالفعل على عملاء أو أدوار أو نطاقات مطابقة.
- تحذيرات حول الجداول غير المعروفة والأعمدة غير المُطابَقة لتعرف ما الذي سيُسقَط.


لوحة المعاينة مع الأعداد والتحذيرات
تجزئات كلمات المرور
يخزّن Duende كلمات المرور باستخدام ASP.NET Identity V3 (PBKDF2). يتحقق PasswordHasher الخاص بـ Authagonal من هذا التنسيق مباشرةً ويعيد تجزئته إلى التنسيق الأصلي عند أول تسجيل دخول ناجح، فيحتفظ المستخدمون بكلمات مرورهم الحالية دون الحاجة إلى عملية إعادة تعيين.
التوفيق بين معرّفات المستخدمين
إذا كان لدى مستخدم موجود بالفعل في هذا المستأجر نفس البريد الإلكتروني لسجلّ وارد، فإن الاستيراد يُدوّر قيمة userId الخاصة بذلك الحساب إلى sub المصدر قبل الاستيراد، بحيث تُرفَق الأدوار وعمليات تسجيل الدخول والمطالبات المستوردة بالحساب الموجود، وتستمر التطبيقات التي تشير إلى المستخدم بالفعل عبر sub المصدر الخاص به في العمل بعد التحويل. تُحفَظ كلمة المرور والملف الشخصي الحاليان للحساب؛ وتُدمج أدوار المصدر فوقها. تسرد المعاينة كل حساب سيجري التوفيق بشأنه قبل الالتزام.
تشغيل الاستيراد
انقر بدء الاستيراد بعد مراجعة المعاينة. تكتب مرحلة الالتزام العملاء والنطاقات والمستخدمين والأدوار ومراجع تسجيلات الدخول الخارجية في مخازن مستأجرك. ويُتجاوز عن الصفوف المكرّرة في clientId وscope name وemail وrole name، فأداة الاستيراد آمنة لإعادة التشغيل.
ما الذي لا يُستورد
- المنح المُخزّنة ورموز الأجهزة والجلسات على جانب الخادم، عناصر قصيرة العمر تُعاد إنشاؤها تلقائياً.
- مفاتيح التوقيع، يُصدر Authagonal مفاتيحه الخاصة لكل مستأجر.
- الأعمدة والجداول المخصصة، أي شيء خارج المخطط القياسي لـ Duende يظهر كتحذير لتعرف أن البيانات قد أُسقطت.
- العملاء المعطّلون، يُستوردون بحالة معطّلة؛ أعد تفعيلهم من صفحة العملاء عند الاستعداد.
غير متاح في بيئة الاختبار
الاستيراد من Auth0
اربط Authagonal بـ Management API الخاص بمستأجر Auth0 لديك وانقل تطبيقاتك وواجهات API والأدوار والمستخدمين واتصالات المؤسسات. تُحفظ معرّفات المستخدمين والتطبيقات المستوردة، فتظل مراجع sub وclient_id الحالية قابلة للحلّ بعد التحويل.
ما الذي ستحتاج إليه
أنشئ تطبيق Machine-to-Machine في Auth0 مصرّحاً له باستخدام Management API، مع منحه نطاقات القراءة هذه: read:users، read:clients، read:resource_servers، read:roles، read:connections، read:client_grants. الصق نطاقه ومعرّف العميل وسرّ العميل في نموذج الاستيراد، فهي تُستخدم للاستيراد فقط.
ما الذي يُستورد
| الكيان | الجداول المصدر | ملاحظات |
|---|---|---|
| التطبيقات | clients, client-grants | يُكتشف نوع العميل (عام أم سرّي) تلقائياً. وتُعاد تجزئة أسرار العملاء كي تستمر في العمل. |
| واجهات API والنطاقات | resource-servers | تُسنَد الجماهير (audiences) والنطاقات إلى كل عميل انطلاقاً من منحه. |
| الأدوار | roles + assignments | تُحفظ إسنادات الأدوار لكل مستخدم. |
| المستخدمون | users + identities | تُنقل الملفات الشخصية والبيانات الوصفية؛ وتصبح الهويات الاجتماعية والمؤسسية تسجيلات دخول مرتبطة. |
| الاتصالات | connections (OIDC) | تصبح اتصالات OIDC المؤسسية موفّرين فيدراليين. أما اتصالات SAML والاجتماعية وقواعد البيانات فيُتجاوز عنها مع تحذير. |
كلمات المرور
لا يُعيد Management API الخاص بـ Auth0 تجزئات كلمات المرور أبداً. إذا كان لديك تصدير كلمات المرور المجمّع المدعوم من فريق Auth0 (NDJSON)، فقدّمه، إذ تُستورد تجزئات bcrypt كما هي ويحتفظ مستخدموك بكلمات مرورهم دون إعادة تعيين. كما يحمل ذلك الملف مجموعة مستخدميك الكاملة، متجاوزاً حدّ سرد 1000 مستخدم في واجهة API لدى Auth0. وبدونه، يُستورد المستخدمون كملفات شخصية ويضبطون كلمة مرور جديدة عند أول تسجيل دخول.
المعاينة والتدوير والحدود نفسها
مرجع API
يوفّر كل مستأجر خادم OIDC متوافقًا مع المعايير على https://{slug}.authagonal.io. تتبع جميع نقاط النهاية مواصفات OAuth 2.0 وOpenID Connect. يغطّي هذا المرجع كل نقطة نهاية قد يحتاج تطبيقك إلى التفاعل معها.
تدفّق رمز التفويض مع PKCE
اكتشاف OIDC وJWKS
يتيح مستند الاكتشاف لمكتبات عميل OIDC ضبط نفسها تلقائيًا. لا حاجة إلى أي مصادقة لأيٍّ من نقطتي النهاية.
GET /.well-known/openid-configuration
تُعيد مستند تكوين موفّر OpenID. تتضمّن الاستجابة كل البيانات الوصفية التي يحتاجها عميلك للتفاعل مع هذا المستأجر.
| الحقل | الوصف |
|---|---|
| issuer | عنوان URL لمُصدِر المستأجر |
| authorization_endpoint | عنوان URL لطلبات التفويض |
| token_endpoint | عنوان URL لتبادل الرموز |
| userinfo_endpoint | عنوان URL لجلب مطالبات المستخدم |
| jwks_uri | عنوان URL لمجموعة مفاتيح الويب JSON |
| revocation_endpoint | عنوان URL لإبطال الرموز |
| introspection_endpoint | عنوان URL لفحص الرموز |
| end_session_endpoint | عنوان URL لتسجيل الخروج / إنهاء الجلسة |
| device_authorization_endpoint | عنوان URL لطلبات تفويض الأجهزة |
| pushed_authorization_request_endpoint | عنوان URL لنقطة نهاية طلب التفويض المدفوع (PAR) (RFC 9126). |
| require_pushed_authorization_requests | ما إذا كان المستأجر يتطلّب PAR على نطاق عام. حتى عندما تكون هذه القيمة false، لا يزال بإمكان العملاء الأفراد ضبط RequirePushedAuthorizationRequests = true. |
| scopes_supported | قائمة النطاقات المدعومة |
| response_types_supported | أنواع الاستجابة المدعومة |
| grant_types_supported | أنواع المنح المدعومة |
| code_challenge_methods_supported | أساليب PKCE المدعومة (S256) |
| backchannel_logout_supported | ما إذا كان تسجيل الخروج عبر القناة الخلفية مدعومًا |
GET /.well-known/openid-configuration/jwks
تُعيد مجموعة مفاتيح الويب JSON المستخدَمة للتحقق من تواقيع الرموز. تحتوي الاستجابة على مصفوفة keys تضم مفاتيح RSA العامة، يتضمّن كل منها الحقول kty وuse وkid وalg وn وe.
curl https://acme.authagonal.io/.well-known/openid-configuration
نقطة نهاية التفويض
GET /connect/authorize
تبدأ تدفّق رمز التفويض. يجب أن تكون لدى المستخدم جلسة نشطة وإلا فسيُعاد توجيهه إلى صفحة تسجيل الدخول. عند النجاح، يُعاد توجيه المستخدم إلى تطبيقك مزوّدًا برمز تفويض.
| المعامل | مطلوب | الوصف |
|---|---|---|
response_type | نعم | يجب أن يكون "code" |
client_id | نعم | مُعرّف العميل المسجّل الخاص بك |
redirect_uri | نعم | يجب أن يطابق تمامًا عنوان إعادة توجيه URI مسجّلًا |
scope | نعم | قائمة بالنطاقات مفصولة بمسافات (مثل "openid profile email") |
state | موصى به | قيمة مبهمة لحماية CSRF، تُعاد دون تغيير في إعادة التوجيه |
code_challenge | مطلوب في حال استخدام PKCE | تجزئة SHA-256 المُرمّزة بترميز Base64url لقيمة code_verifier |
code_challenge_method | مطلوب في حال استخدام PKCE | يجب أن يكون "S256" |
nonce | اختياري | قيمة مرتبطة برمز الهوية للحماية من إعادة التشغيل |
login_hint | اختياري | ملء حقل البريد الإلكتروني مسبقًا في صفحة تسجيل الدخول |
استجابة النجاح: إعادة توجيه 302 إلى redirect_uri مع معاملي الاستعلام code وstate.
استجابة الخطأ: إعادة توجيه 302 مع معاملات الاستعلام error وerror_description وstate.
PKCE مطلوب
code_verifier (سلسلة عشوائية من 43 حرفًا أو أكثر)، وجزّئها باستخدام SHA-256، ثم رمّز النتيجة بترميز Base64url لإنشاء قيمة code_challenge.طلبات التفويض المدفوعة (PAR)
RFC 9126. بدلًا من وضع كل معاملات التفويض على عنوان URL، يرسل عميلك طلب POST بها إلى /connect/par مع مصادقة العميل المعتادة ويستردّ قيمة request_uri مبهمة قصيرة العمر. ثم يزور المتصفّح /connect/authorize?client_id=...&request_uri=...، فلا يصل أي شيء آخر إلى سجل المتصفّح أو سجلات الخادم أو ترويسات Referer، ويكون الخادم قد تحقّق بالفعل من سلامة المعاملات تحت مصادقة العميل.
POST /connect/par
مصادقة العميل هي نفسها المستخدَمة في /connect/token: مصادقة HTTP الأساسية باستخدام client_id/client_secret، أو بيانات اعتماد مُرمّزة في النموذج. ينشر العملاء العامون دون كلمة سر. يحمل النص نفس المعاملات التي ترسلها عادةً إلى /connect/authorize؛ أما request_uri نفسها فمرفوضة (تسلسل PAR محظور بموجب §2.1 من المواصفة). تُعيد 201 Created.
| المعامل | مطلوب | الوصف |
|---|---|---|
client_id | نعم | مُعرّف العميل الخاص بك. يجب أن يطابق العميل المُصادَق عليه. |
client_secret | العملاء السرّيون | كلمة سر العميل الخاصة بك. مطلوبة للعملاء السرّيين. |
response_type | نعم | يجب أن يكون "code" |
redirect_uri | نعم | يجب أن يطابق تمامًا عنوان إعادة توجيه URI مسجّلًا |
scope | نعم | قائمة بالنطاقات مفصولة بمسافات (مثل "openid profile email") |
code_challenge | مطلوب في حال استخدام PKCE | تجزئة SHA-256 المُرمّزة بترميز Base64url لقيمة code_verifier |
code_challenge_method | مطلوب في حال استخدام PKCE | يجب أن يكون "S256" |
state | موصى به | قيمة مبهمة لحماية CSRF، تُعاد دون تغيير في إعادة التوجيه |
nonce | اختياري | قيمة مرتبطة برمز الهوية للحماية من إعادة التشغيل |
الاستجابة
| الحقل | الوصف |
|---|---|
request_uri | مرجع مبهم يُستخدَم لمرة واحدة، مثل <code>urn:ietf:params:oauth:request_uri:abc123…</code>. مرّره إلى <code>/connect/authorize</code> بصفته <code>request_uri</code>. |
expires_in | عمر قيمة <code>request_uri</code> بالثواني. القيمة الافتراضية هي 90، وهي قيمة نموذجية لموفّري الهوية المرجعيين. |
في طلب المتابعة GET /connect/authorize?client_id=…&request_uri=…، تُسحَب جميع المعاملات الأخرى من الحمولة المدفوعة ويُتجاهَل أي معاملات استعلام إضافية. يجب أن يطابق client_id في استدعاء التفويض العميل الذي دفع الطلب. وبمجرد استهلاك قيمة request_uri (أو انقضاء expires_in)، تُزال من المخزن.
فرض PAR لكل عميل
/connect/authorize العادية منه. يجمع الوضع الموصى به للعملاء عالي المخاطر بين RequirePushedAuthorizationRequests = true وPKCE، وهو ما يزيل شريط عناوين URL بصفته سطح هجوم بالكامل.# 1. Push parameters (server returns request_uri + expires_in) curl -X POST https://acme.authagonal.io/connect/par \ -u "my-app:CLIENT_SECRET" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "response_type=code" \ -d "redirect_uri=https://app.example.com/callback" \ -d "scope=openid profile email" \ -d "state=$(openssl rand -hex 16)" \ -d "code_challenge=YOUR_CODE_CHALLENGE" \ -d "code_challenge_method=S256" # 2. Send the user to /authorize with only client_id + request_uri # https://acme.authagonal.io/connect/authorize?client_id=my-app&request_uri=urn:ietf:params:oauth:request_uri:abc123...
نقطة نهاية الرموز
POST /connect/token
تبادل بيانات الاعتماد بالرموز. يجب أن تستخدم الطلبات Content-Type: application/x-www-form-urlencoded. يمكن توفير مصادقة العميل عبر مصادقة HTTP الأساسية (Authorization: Basic base64(client_id:client_secret)) أو بصفتها معاملات في نص النموذج (client_id + client_secret).
منح رمز التفويض
| المعامل | مطلوب | الوصف |
|---|---|---|
grant_type | نعم | "authorization_code" |
code | نعم | رمز التفويض المأخوذ من إعادة التوجيه |
redirect_uri | نعم | يجب أن يطابق عنوان URI المستخدَم في طلب التفويض |
code_verifier | مطلوب في حال استخدام PKCE | السلسلة العشوائية الأصلية المستخدَمة لإنشاء code_challenge |
client_id | نعم | مُعرّف العميل الخاص بك (إن لم تكن تستخدم مصادقة Basic) |
client_secret | العملاء السرّيون | كلمة سر العميل الخاصة بك (إن لم تكن تستخدم مصادقة Basic) |
منح رمز التحديث
| المعامل | مطلوب | الوصف |
|---|---|---|
grant_type | نعم | "refresh_token" |
refresh_token | نعم | رمز التحديث المراد تبادله |
client_id | نعم | مُعرّف العميل الخاص بك |
client_secret | العملاء السرّيون | كلمة سر العميل الخاصة بك |
منح بيانات اعتماد العميل
| المعامل | مطلوب | الوصف |
|---|---|---|
grant_type | نعم | "client_credentials" |
client_id | نعم | مُعرّف العميل الخاص بك |
client_secret | نعم | كلمة سر العميل الخاصة بك |
scope | اختياري | النطاقات المطلوبة مفصولة بمسافات |
منح رمز الجهاز
| المعامل | مطلوب | الوصف |
|---|---|---|
grant_type | نعم | "urn:ietf:params:oauth:grant-type:device_code" |
device_code | نعم | رمز الجهاز المأخوذ من استجابة تفويض الجهاز |
client_id | نعم | مُعرّف العميل الخاص بك |
client_secret | العملاء السرّيون | كلمة سر العميل الخاصة بك |
استجابة الرمز:
| الحقل | الوصف |
|---|---|
access_token | رمز الوصول لاستدعاءات API |
token_type | "Bearer" |
expires_in | عمر الرمز بالثواني |
id_token | رمز هوية OpenID Connect (عند طلب نطاق openid) |
refresh_token | رمز التحديث (عند منح نطاق offline_access) |
curl -X POST https://acme.authagonal.io/connect/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=authorization_code" \ -d "code=AUTHORIZATION_CODE" \ -d "redirect_uri=https://app.example.com/callback" \ -d "client_id=my-app" \ -d "code_verifier=YOUR_CODE_VERIFIER"
نقطة نهاية UserInfo
GET /connect/userinfo
تُعيد مطالبات حول المستخدم المُصادَق عليه. تتطلّب رمز وصول صالحًا يحمل نطاق openid.
| الحقل | النوع | الوصف |
|---|---|---|
sub | string | مُعرّف المستخدم الفريد |
email | string | عنوان البريد الإلكتروني للمستخدم |
email_verified | boolean | ما إذا كان البريد الإلكتروني قد تم التحقق منه |
given_name | string | الاسم الأول |
family_name | string | اسم العائلة |
name | string | الاسم الكامل المعروض |
phone_number | string | رقم الهاتف (إن تم توفيره) |
org_id | string | مُعرّف المؤسسة |
roles | string[] | مصفوفة الأدوار المُسنَدة |
groups | object[] | مصفوفة عضويات المجموعات، يحمل كل عنصر منها مُعرّفًا واسمًا |
curl https://acme.authagonal.io/connect/userinfo \ -H "Authorization: Bearer ACCESS_TOKEN"
فحص الرموز (RFC 7662)
POST /connect/introspect
يتحقّق من رمز ويعيد بياناته الوصفية. يتطلّب بيانات اعتماد العميل (مصادقة Basic أو معاملات في نص النموذج).
| المعامل | مطلوب | الوصف |
|---|---|---|
token | نعم | الرمز المراد فحصه |
token_type_hint | اختياري | تلميح حول نوع الرمز (مثل "refresh_token") |
استجابة الرمز النشط:
| الحقل | الوصف |
|---|---|
active | true |
sub | الموضوع (مُعرّف المستخدم) |
client_id | العميل الذي أُصدِر له الرمز |
scope | النطاقات الممنوحة مفصولة بمسافات |
iss | المُصدِر |
exp | وقت انتهاء الصلاحية (طابع زمني Unix) |
iat | وقت الإصدار (طابع زمني Unix) |
aud | الجمهور |
token_type | نوع الرمز (مثل "Bearer") |
استجابة الرمز غير النشط: { "active": false }
دائمًا 200 OK
active: false.curl -X POST https://acme.authagonal.io/connect/introspect \ -u "my-app:CLIENT_SECRET" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "token=ACCESS_OR_REFRESH_TOKEN"
إبطال الرموز (RFC 7009)
POST /connect/revocation
يُبطل رمزًا أُصدِر مسبقًا. يتطلّب بيانات اعتماد العميل.
| المعامل | مطلوب | الوصف |
|---|---|---|
token | نعم | الرمز المراد إبطاله |
token_type_hint | اختياري | تلميح حول نوع الرمز (مثل "refresh_token") |
تُعيد نقطة النهاية دائمًا 200 OK، حتى للرموز غير الصالحة أو المُبطَلة بالفعل، وفقًا لمواصفة RFC 7009.
رموز التحديث فقط
تفويض الأجهزة (RFC 8628)
POST /connect/deviceauthorization
يبدأ تدفّق تفويض الأجهزة للأجهزة محدودة الإدخال (واجهات سطر الأوامر، وأجهزة التلفاز الذكية، وأجهزة إنترنت الأشياء). يعرض الجهاز رمزًا للمستخدم الذي يوافق بعد ذلك على الطلب على جهاز منفصل مزوّد بمتصفّح.
| المعامل | مطلوب | الوصف |
|---|---|---|
client_id | نعم | مُعرّف العميل الخاص بك |
client_secret | العملاء السرّيون | كلمة سر العميل الخاصة بك |
scope | اختياري | النطاقات مفصولة بمسافات (القيمة الافتراضية "openid") |
الاستجابة:
| الحقل | الوصف |
|---|---|
device_code | رمز التحقق من الجهاز (يُستخدَم للاستعلام المتكرّر) |
user_code | الرمز المعروض للمستخدم بصيغة XXXX-XXXX |
verification_uri | عنوان URL الذي يزوره المستخدم لإدخال الرمز |
verification_uri_complete | عنوان URL مع ملء user_code مسبقًا |
expires_in | 600 (بالثواني، الرمز صالح لمدة 10 دقائق) |
interval | 5 (بالثواني، الحد الأدنى لفترة الاستعلام المتكرّر) |
تدفّق الموافقة: يزور المستخدم verification_uri، ويُدخل user_code، ويوافق على الطلب. وفي غضون ذلك، يستعلم الجهاز من نقطة نهاية الرموز باستخدام device_code.
رموز أخطاء الاستعلام المتكرّر:
| الخطأ | المعنى |
|---|---|
authorization_pending | لم يوافق المستخدم بعد، تابع الاستعلام |
expired_token | انتهت صلاحية رمز الجهاز، أعد بدء التدفّق |
access_denied | رفض المستخدم طلب التفويض |
curl -X POST https://acme.authagonal.io/connect/deviceauthorization \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "client_id=my-cli" \ -d "scope=openid profile email"
إنهاء الجلسة / تسجيل الخروج
GET POST /connect/endsession
يسجّل خروج جلسة المستخدم الحالية، ويطلق تسجيل الخروج عبر القناة الخلفية لجميع العملاء الذين لديهم BackChannelLogoutUri مسجّل، ويُبطل جميع المنح.
| المعامل | مطلوب | الوصف |
|---|---|---|
id_token_hint | اختياري | رمز الهوية، يُستخدَم للتحقق من post_logout_redirect_uri |
post_logout_redirect_uri | اختياري | وجهة إعادة التوجيه بعد تسجيل الخروج (يجب أن تكون مسجّلة) |
state | اختياري | قيمة مبهمة تُعاد في إعادة التوجيه |
إذا تم توفير قيمة post_logout_redirect_uri صالحة وطابقت عنوان URI مسجّلًا، فسيتلقّى المستخدم إعادة توجيه 302. وإلا فستؤكّد استجابة JSON أن الجلسة قد أُنهيت.
تسجيل الخروج عبر القناة الخلفية
BackChannelLogoutUri الخاص بكل عميل. يحتوي رمز JWT على sub وaud وiss ومطالبة الحدث http://schemas.openid.net/event/backchannel-logout. وينبغي لتطبيقك إبطال جلسة المستخدم المحلية عند تلقّي هذا الإشعار.مرجع API لـ SCIM 2.0
يدعم Authagonal بروتوكول SCIM 2.0 لتزويد المستخدمين والمجموعات تلقائيًا. ويمكن لموفّري الهوية مثل Okta وAzure AD وOneLogin استخدام هذا الـ API للحفاظ على مزامنة مستأجر Authagonal الخاص بك مع دليل شركتك.
عنوان URL الأساسي: https://{slug}.authagonal.io/scim/v2
المصادقة: تتطلّب جميع الطلبات رمز Bearer. أنشئ رمز SCIM في البوابة ضمن الإعدادات > تزويد SCIM.
الترويسات الشائعة:
| الترويسة | القيمة |
|---|---|
Authorization | Bearer SCIM_TOKEN |
Content-Type | application/scim+json |
تدعم نقاط نهاية القوائم التقسيم إلى صفحات عبر معاملي الاستعلام startIndex (يبدأ من 1) وcount (بحد أقصى 200)، والتصفية عبر معامل filter (مثل userName eq "[email protected]").
المستخدمون
GET /scim/v2/Users — سرد المستخدمين مع تقسيم اختياري إلى صفحات وتصفية.
| معامل الاستعلام | الوصف |
|---|---|
startIndex | فهرس النتيجة الأولى يبدأ من 1 (القيمة الافتراضية: 1) |
count | العدد الأقصى للنتائج في كل صفحة (بحد أقصى: 200) |
filter | تعبير تصفية SCIM (مثل userName eq "[email protected]") |
GET /scim/v2/Users/{id} — الحصول على مستخدم واحد عبر مُعرّف مستخدم Authagonal الخاص به.
POST /scim/v2/Users — إنشاء مستخدم جديد. تُعيد 201 Created.
| الحقل | مطلوب | الوصف |
|---|---|---|
userName | نعم | عنوان البريد الإلكتروني (يجب أن يكون فريدًا داخل المستأجر) |
name.givenName | لا | الاسم الأول |
name.familyName | لا | اسم العائلة |
displayName | لا | الاسم الكامل المعروض |
active | لا | ما إذا كان المستخدم نشطًا (القيمة الافتراضية: true) |
externalId | لا | المُعرّف من موفّر الهوية المنبع |
PUT /scim/v2/Users/{id} — استبدال كامل لمورد المستخدم. يجب توفير جميع الحقول.
PATCH /scim/v2/Users/{id} — تحديث جزئي باستخدام SCIM PatchOp.
| العملية | المسارات المدعومة | قيمة المثال |
|---|---|---|
replace | active, name.givenName, name.familyName, externalId | true / false، أو قيمة نصية |
add | name.givenName, name.familyName, externalId | قيمة نصية |
remove | externalId | (لا حاجة إلى قيمة) |
DELETE /scim/v2/Users/{id} — يحذف المستخدم حذفًا ناعمًا (يعطّل الحساب ويُبطل جميع الرموز). تُعيد 204 No Content.
curl -X POST https://acme.authagonal.io/scim/v2/Users \
-H "Authorization: Bearer SCIM_TOKEN" \
-H "Content-Type: application/scim+json" \
-d '{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "[email protected]",
"name": {
"givenName": "Jane",
"familyName": "Smith"
},
"displayName": "Jane Smith",
"active": true,
"externalId": "ext-12345"
}'المجموعات
GET /scim/v2/Groups — سرد جميع المجموعات مع تقسيم اختياري إلى صفحات وتصفية.
GET /scim/v2/Groups/{id} — الحصول على مجموعة واحدة عبر المُعرّف، بما في ذلك قائمة أعضائها.
POST /scim/v2/Groups — إنشاء مجموعة جديدة. تُعيد 201 Created.
| الحقل | مطلوب | الوصف |
|---|---|---|
displayName | نعم | الاسم المعروض للمجموعة |
members | لا | مصفوفة من كائنات الأعضاء، يحمل كل منها حقل value يحتوي على مُعرّف المستخدم |
externalId | لا | المُعرّف من موفّر الهوية المنبع |
PUT /scim/v2/Groups/{id} — استبدال كامل لمورد المجموعة (بما في ذلك قائمة أعضائها).
PATCH /scim/v2/Groups/{id} — تحديث جزئي لإضافة أعضاء المجموعة أو إزالتهم.
DELETE /scim/v2/Groups/{id} — يحذف المجموعة حذفًا نهائيًا. تُعيد 204 No Content.
curl -X PATCH https://acme.authagonal.io/scim/v2/Groups/GROUP_ID \
-H "Authorization: Bearer SCIM_TOKEN" \
-H "Content-Type: application/scim+json" \
-d '{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "add",
"path": "members",
"value": [
{ "value": "USER_ID_1" },
{ "value": "USER_ID_2" }
]
}
]
}'استجابات أخطاء SCIM
{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"], "status": "400", "detail": "..." }. تشمل رموز الحالة الشائعة 400 (طلب غير صالح)، و404 (المورد غير موجود)، و409 (تعارض / تكرار)، و429 (تجاوز حد المعدل).API البوابة (الأتمتة)
تتيح API البوابة لخادمك الخلفي أتمتة كل ما يمكنك القيام به في البوابة، أي إدارة المستخدمين والعملاء والمجموعات والأدوار والنطاقات واتصالات SSO والإعدادات، باستخدام بيانات اعتماد من آلة إلى آلة. وهي ذاتها الـ API التي تستدعيها واجهة البوابة.
عنوان URL الأساسي: https://portal-api.<your-domain>/api/v1. تُصادَق الطلبات برمز وصول من نوع Bearer، ويُؤخذ المستأجر من الرمز لا من عنوان URL.
إنشاء بيانات اعتماد لـ API
في البوابة، افتح العملاء ← إنشاء بيانات اعتماد API، واختر مستوى وصول، وامنحها اسمًا. ينشئ Authagonal عميل OAuth من نوع client_credentials مهيأً للعمل مع API البوابة، ويعيد معرّف عميل وسرًّا.
انسخ السر فورًا
مستويات الوصول
| النطاق | يمنح |
|---|---|
tenant:owner | وصول كامل، بما في ذلك الإجراءات التدميرية الخاصة بالمالك وحده مثل حذف المستأجر بأكمله. |
tenant:admin | إدارة كل شيء باستثناء الإجراءات الخاصة بالمالك وحده، أي المستخدمين والعملاء وSSO والمجموعات والأدوار والعلامة التجارية والإعدادات. |
tenant:developer | إدارة العملاء والنطاقات وتطبيقات التزويد. |
tenant:support | قراءة المستخدمين وإدارتهم لأغراض مهام الدعم. |
لا يمكنك منح أكثر مما تملك
الحصول على رمز
بادل بيانات الاعتماد برمز وصول عند نقطة نهاية الرمز الخاصة بمستأجرك، أي https://<your-tenant>.<your-domain>/connect/token، ثم أرسل الرمز كترويسة Bearer إلى API البوابة. تظل الرموز صالحة لمدة ساعة واحدة.
# 1. Exchange the credential for an access token (your tenant's token endpoint)
curl -X POST https://acme.authagonal.io/connect/token \
-d grant_type=client_credentials \
-d client_id=api-3f2a... \
-d client_secret=YOUR_CLIENT_SECRET \
-d scope=tenant:admin
# Response: { "access_token": "ey...", "token_type": "Bearer", "expires_in": 3600 }
# 2. Call the Portal API with the access token
curl https://portal-api.authagonal.io/api/v1/users \
-H "Authorization: Bearer $ACCESS_TOKEN"نقاط النهاية
جميع المسارات نسبية إلى عنوان URL الأساسي وتتطلب رمز وصول من نوع Bearer. النطاق المذكور بجانب كل مجموعة هو الحد الأدنى لمستوى وصول بيانات الاعتماد الذي تحتاجه. تقبل نقاط نهاية القوائم معاملي الاستعلام startIndex وcount.
tenant:developerGET/api/v1/clients— سرد عملاء OAuth.
GET/api/v1/clients/{id}— الحصول على عميل واحد بمعرّفه.
POST/api/v1/clients— إنشاء عميل. يعيد معرّف العميل، وللعملاء السرّيين يعيد سرًّا يُستخدم مرة واحدة.
PUT/api/v1/clients/{id}— تحديث عميل (عناوين إعادة التوجيه URIs، أنواع المنح، فترات صلاحية الرموز، متطلبات PKCE/PAR).
DELETE/api/v1/clients/{id}— حذف عميل.
POST/api/v1/clients/api-credential— إصدار بيانات اعتماد API البوابة من آلة إلى آلة.
tenant:supportGET/api/v1/users— سرد المستخدمين. يدعم startIndex وcount والبحث (بادئة البريد الإلكتروني / الاسم).
GET/api/v1/users/count— إجمالي عدد المستخدمين للمستأجر.
GET/api/v1/users/stats/mfa— إحصائيات تسجيل MFA.
GET/api/v1/users/{id}— الحصول على مستخدم واحد.
POST/api/v1/users— إنشاء مستخدم ببريد إلكتروني وكلمة مرور.
PUT/api/v1/users/{id}— تحديث مستخدم (الملف الشخصي، البريد الإلكتروني، حالة التمكين/الحظر).
DELETE/api/v1/users/{id}— حذف مستخدم.
GET/api/v1/users/{id}/mfa— Get a user's enrolled MFA methods.
DELETE/api/v1/users/{id}/mfa— Reset a user's MFA enrollment.
tenant:adminGET/api/v1/roles— سرد الأدوار.
POST/api/v1/roles— إنشاء دور.
DELETE/api/v1/roles/{id}— حذف دور.
POST/api/v1/roles/assign— تعيين دور لمستخدم.
POST/api/v1/roles/unassign— إزالة دور من مستخدم.
tenant:adminGET/api/v1/groups— سرد المجموعات.
GET/api/v1/groups/{id}— الحصول على مجموعة مع أعضائها.
POST/api/v1/groups— إنشاء مجموعة.
POST/api/v1/groups/{id}/members— إضافة أعضاء إلى مجموعة.
DELETE/api/v1/groups/{groupId}/members/{userId}— إزالة عضو من مجموعة.
DELETE/api/v1/groups/{id}— حذف مجموعة.
GET/api/v1/group-role-mappings— سرد تعيينات المجموعات إلى الأدوار (الأدوار الممنوحة عند إصدار الرمز بحسب عضوية المجموعة).
tenant:developerGET/api/v1/scopes— سرد نطاقات API.
POST/api/v1/scopes— إنشاء نطاق.
DELETE/api/v1/scopes/{name}— حذف نطاق.
tenant:adminGET/api/v1/saml/connections— سرد اتصالات SAML.
POST/api/v1/saml/connections— إنشاء اتصال SAML.
DELETE/api/v1/saml/connections/{id}— حذف اتصال SAML.
GET/api/v1/oidc/connections— سرد اتصالات OIDC.
POST/api/v1/oidc/connections— إنشاء اتصال OIDC.
DELETE/api/v1/oidc/connections/{id}— حذف اتصال OIDC.
GET/api/v1/sso/domains— سرد النطاقات الموجَّهة إلى اتصالات SSO (اكتشاف نطاق الهوية الأصلي).
tenant:adminGET/api/v1/branding— الحصول على العلامة التجارية للمستأجر (الألوان، الشعار، اللغات المدعومة).
PUT/api/v1/branding— تحديث العلامة التجارية للمستأجر.
tenant:adminGET/api/v1/settings— الحصول على إعدادات المستأجر (خطافات الويب، التسجيل العام، سياسة الرموز).
PUT/api/v1/settings— تحديث إعدادات المستأجر.
POST/api/v1/settings/webhook-secret/regenerate— تدوير سر توقيع خطاف الويب.
POST/api/v1/settings/test-email— إرسال بريد إلكتروني تجريبي باستخدام إعدادات البريد الإلكتروني الحالية.
tenant:adminGET/api/v1/custom-domains— سرد نطاقات تسجيل الدخول المخصصة وحالة التحقق منها.
POST/api/v1/custom-domains— إضافة نطاق مخصص.
POST/api/v1/custom-domains/{domain}/verify— تشغيل التحقق عبر DNS لنطاق مخصص.
DELETE/api/v1/custom-domains/{domain}— إزالة نطاق مخصص.
GET/api/v1/email/domains— سرد نطاقات البريد الإلكتروني للمُرسِل.
tenant:adminGET/api/v1/audit— الاستعلام في سجل تدقيق المستأجر.
تزويد المستخدمين عبر SCIM
مثال: إنشاء مستخدم
curl -X POST https://portal-api.authagonal.io/api/v1/users \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"password": "S3cure-temp-passw0rd",
"firstName": "Ada",
"lastName": "Lovelace"
}'
# 200 OK
# { "userId": "8f3a...", "email": "[email protected]" }كل ما تستطيع الواجهة فعله
شاشات تسجيل الدخول
هذه هي الشاشات المستضافة التي يراها المستخدمون النهائيون على خادم المصادقة الخاص بمستأجرك. يوفّر Authagonal كل شاشة جاهزة للاستخدام، فتحصل على تجربة تسجيل دخول كاملة وآمنة دون بناء أي واجهة. تستعرض هذه الصفحة كل شاشة وتبيّن أي إعدادات البوابة تتحكم بها.
علامة بيضاء بالكامل
prefers-color-scheme، فتنتقل بين الوضعين الفاتح والداكن لتطابق جهاز المستخدم.تسجيل الدخول


- تدفق من خطوتين يبدأ بالبريد الإلكتروني: يُدخل المستخدم بريده الإلكتروني وينقر متابعة، ثم يظهر حقل كلمة المرور.
- تظهر أزرار الدخول الموحّد "المتابعة باستخدام {provider}" تلقائيًا عند وجود اتصالات SSO.
- روابط نسيت كلمة المرور وإنشاء حساب، ويمكن إظهار كلٍّ منها أو إخفاؤه.
- اختبار Cloudflare Turnstile اختياري لردع محاولات تسجيل الدخول الآلية.
يُتحكم بها من إدارة البوابة
- تضبط العلامة التجارية الشعار واللون واسم التطبيق والبريد الإلكتروني للدعم وCSS المخصص.
- إظهار أو إخفاء رابطي نسيت كلمة المرور والتسجيل (العلامة التجارية).
- تضيف اتصالات SSO أزرار الدخول الاجتماعي (صفحة SSO).
- مدة الجلسة وعتبات القفل (الإعدادات → الأمان).
التسجيل


- يجمع الاسم الأول والأخير (اختياري) والبريد الإلكتروني وكلمة المرور.
- قائمة تحقق حيّة لسياسة كلمة المرور تتحدث أثناء كتابة المستخدم، فتتضح المتطلبات قبل الإرسال.
- اختبار Cloudflare Turnstile اختياري.
- رابط "تسجيل الدخول" للمستخدمين الذين لديهم حساب بالفعل.
يُتحكم بها من إدارة البوابة
- إظهار أو إخفاء رابط التسجيل (العلامة التجارية).
- تتحكم سياسة كلمة المرور الخاصة بمستأجرك في قائمة التحقق.
- تنسّق العلامة التجارية الشاشة بأكملها.
نسيت كلمة المرور


- يُدخل المستخدم بريده الإلكتروني، ثم يرى تأكيدًا محايدًا بصيغة "تحقق من بريدك الإلكتروني".
- الشاشة لا تكشف أبدًا ما إذا كان الحساب موجودًا، ما يحبط محاولات استكشاف الحسابات.
- رابط "العودة إلى تسجيل الدخول" يعيد المستخدم إلى شاشة تسجيل الدخول.
يُتحكم بها من إدارة البوابة
- إظهار أو إخفاء رابط نسيت كلمة المرور (العلامة التجارية).
- يرسل توصيل البريد الإلكتروني الخاص بمستأجرك رسالة إعادة التعيين.
- تنسّق العلامة التجارية الشاشة بأكملها.
إعادة تعيين كلمة المرور


- حقلا كلمة المرور الجديدة وتأكيد كلمة المرور مع قائمة تحقق حيّة لكل قاعدة من المتطلبات.
- حالة واضحة لـ رابط غير صالح أو منتهي الصلاحية عندما لا يعود رمز إعادة التعيين صالحًا.
- حالة نجاح تؤكد تغيير كلمة المرور.
يُتحكم بها من إدارة البوابة
- تتحكم سياسة كلمة المرور الخاصة بمستأجرك في قائمة التحقق.
- تنسّق العلامة التجارية الشاشة بأكملها.
تحدي MFA


- مبدّل طرق بين تطبيق المصادقة ومفتاح المرور ورمز الاسترداد.
- حقل TOTP من 6 أرقام يُرسَل تلقائيًا بمجرد إدخال جميع الأرقام.
- إدخال رمز الاسترداد للمستخدمين الذين فقدوا الوصول إلى تطبيق المصادقة لديهم.
- زر مفتاح المرور للتحقق المدعوم بالعتاد.
يُتحكم بها من إدارة البوابة
- تُضبط سياسة MFA لكل تطبيق على حدة (العملاء → الأمان).
- أي مستخدم لديه عامل مسجَّل يُطالَب به دائمًا، بصرف النظر عن السياسة.
إعداد MFA


- يعرض حالة الطرق المسجَّلة ليعرف المستخدم ما هو مُعدّ بالفعل.
- إعداد تطبيق المصادقة عبر رمز QR، مع مفتاح يدوي بديل، وخطوة تأكيد.
- تسجيل مفتاح المرور للمصادقة المدعومة بالعتاد.
- إنشاء رموز الاسترداد لاستعادة الحساب.
- تخطٍّ اختياري عندما يكون MFA بالخدمة الذاتية لا إلزاميًا.
يُتحكم بها من إدارة البوابة
- تُضبط سياسة MFA لكل تطبيق على حدة، ويفرض الخيار إلزامي الإعداد عند تسجيل الدخول (العملاء → الأمان).
- تنسّق العلامة التجارية الشاشة بأكملها.
تفويض الجهاز


- حقل إدخال رمز المستخدم موسَّط للرمز المعروض على الجهاز.
- خطوة موافقة لتفويض الجهاز.
- شاشة تسجيل دخول وسيطة عندما لا يكون المستخدم مصادَقًا بعد.
- تأكيد موافقة بمجرد تفويض الجهاز.
يُتحكم بها من إدارة البوابة
- فعّل منح رمز الجهاز على التطبيق (العملاء → أنواع المنح).
- اضبط مدة صلاحية رمز الجهاز (العملاء → الرموز).
الموافقة


- تعرض شعار العميل واسمه الطالب.
- قائمة لكل نطاق بعناوين ودّية وسهلة القراءة لكل إذن.
- زرّا السماح والرفض لمنح الوصول أو رفضه.
- تذييل تلميح الموافقة يشرح ما يعنيه القرار.
يُتحكم بها من إدارة البوابة
- فعّل اشتراط الموافقة لكل تطبيق على حدة (العملاء → الأمان).
- يأتي الشعار والاسم وعنوان URL من البيانات الوصفية الخاصة بالتطبيق نفسه.
- ترسم العلامة التجارية بطاقة الموافقة.
التطبيقات المتصلة (المنح)


- تسرد كل تطبيق فوّضه المستخدم، مع اسمه ونطاقاته وتاريخ المنح.
- إلغاء وصول تطبيق ما، مع خطوة تأكيد قبل نفاذ الإجراء.
- حالة فارغة ودّية عندما لا يكون المستخدم قد فوّض أي تطبيقات.
يُتحكم بها من إدارة البوابة
- تُملأ القائمة بـ التطبيقات التي تتطلب الموافقة.
- تنسّق العلامة التجارية الشاشة بأكملها.
الحساب
صفحة حساب مستضافة بالخدمة الذاتية على /login/account حيث يدير المستخدمون المسجَّلون ملفهم الشخصي ولغتهم المفضّلة، دون الحاجة إلى الوصول إلى البوابة.


- تحرير الاسم الأول والأخير والشركة والهاتف، ويُعرض عنوان البريد الإلكتروني للقراءة فقط.
- اختيار لغة مفضّلة من اللغات المدعومة، وتعاين الواجهة الاختيار فورًا وتحفظه عند الحفظ.
- تتحكم اللغة المحفوظة في الواجهة المستضافة للمستخدم وفي لغة الرسائل البريدية الإجرائية التي يتلقاها.
يُتحكم بها من إدارة البوابة
- تنسّق العلامة التجارية الشاشة بأكملها.
- اللغة المفضّلة ذاتها قابلة للتحرير من قبل المسؤول في صفحة المستخدمون بالبوابة.
تدفقات المصادقة
تغطي تدفقات المصادقة كيفية تفاعل المستخدمين النهائيين مع مستأجر Authagonal الخاص بك، أي تسجيل الدخول والتسجيل وإعادة تعيين كلمات المرور وإعداد MFA. تستخدم صفحة تسجيل الدخول المستضافة نقاط النهاية هذه، ويمكن استدعاؤها مباشرةً إن كنت تبني واجهة تسجيل دخول مخصصة.
تسجيل الدخول
POST /api/auth/login
يصادق المستخدم بالبريد الإلكتروني وكلمة المرور. عند النجاح، يوقّع ملف تعريف ارتباط للجلسة ويعيد الملف الشخصي للمستخدم. إذا كان MFA مهيأً، تشير الاستجابة إلى أن عاملًا ثانيًا مطلوب قبل ترسيخ الجلسة بالكامل.
نص الطلب:
{
"email": "[email protected]",
"password": "correct-horse-battery-staple"
}استجابة النجاح:
| الحقل | النوع | الوصف |
|---|---|---|
userId | string | معرّف المستخدم الفريد |
email | string | عنوان البريد الإلكتروني للمستخدم |
name | string | اسم العرض الكامل |
mfaAvailable | boolean | ما إذا كان المستخدم قد سجّل طرق MFA |
استجابة طلب MFA: عندما يكون المستخدم قد سجّل MFA، تتضمن الاستجابة mfaRequired: true إلى جانب challengeId ومصفوفة methods تسرد طرق MFA المتاحة.
استجابة طلب إعداد MFA: عندما يتطلب المستأجر MFA ولكن المستخدم لم يسجّل بعد، تتضمن الاستجابة mfaSetupRequired: true مع setupToken لتدفق التسجيل.
استجابات الخطأ:
| رمز الخطأ | حالة HTTP | الوصف |
|---|---|---|
invalid_credentials | 401 | البريد الإلكتروني أو كلمة المرور غير صحيحة |
account_disabled | 403 | تم تعطيل الحساب من قبل مسؤول |
email_not_confirmed | 403 | لم يتحقق المستخدم من عنوان بريده الإلكتروني |
locked_out | 423 | الحساب مقفل مؤقتًا (يتضمن retryAfter بالثواني) |
sso_required | 409 | نطاق البريد الإلكتروني مهيأ لـ SSO (يتضمن redirectUrl) |
فحص SSO: إذا كان نطاق البريد الإلكتروني للمستخدم لديه اتصال SSO مهيأ، تعيد نقطة نهاية تسجيل الدخول sso_required مع redirectUrl. ينبغي للعميل إعادة توجيه المستخدم إلى موفّر SSO.
قفل الحساب: بعد maxFailedAttempts من محاولات تسجيل الدخول الفاشلة المتتالية، يُقفل الحساب لمدة lockoutDurationMinutes. كلا القيمتين قابلتان للضبط في إعدادات المستأجر.
صفحة تسجيل الدخول المستضافة
التسجيل
POST /api/auth/register
ينشئ حساب مستخدم جديدًا. يُرسَل بريد تحقق تلقائيًا، وعلى المستخدم التحقق من بريده الإلكتروني قبل أن يتمكن من تسجيل الدخول.
نص الطلب:
{
"email": "[email protected]",
"password": "a-strong-password-here",
"firstName": "Jane",
"lastName": "Smith"
}| الحقل | مطلوب | الوصف |
|---|---|---|
email | نعم | عنوان البريد الإلكتروني (يجب أن يكون فريدًا) |
password | نعم | يجب أن يستوفي سياسة كلمة المرور للمستأجر |
firstName | لا | الاسم الأول |
lastName | لا | اسم العائلة |
النجاح: 201 Created مع userId للحساب الجديد. التسجيل ببريد إلكتروني مستخدَم بالفعل يعيد 201 أيضًا: فنحن لا نكشف أبدًا ما إذا كان البريد الإلكتروني موجودًا (لمنع تعداد الحسابات)، وبدلًا من ذلك نُعلِم صاحب الحساب الحقيقي عبر البريد الإلكتروني.
استجابات الخطأ:
| رمز الخطأ | حالة HTTP | الوصف |
|---|---|---|
weak_password | 400 | كلمة المرور لا تستوفي سياسة كلمة المرور للمستأجر |
rate_limited | 429 | محاولات تسجيل كثيرة جدًا |
provisioning_rejected | 422 | رفض خطاف ويب للتزويد عملية التسجيل |
سياسة كلمة المرور
/api/auth/password-policy. يعيد هذا الحد الأدنى للطول، وفئات الأحرف المطلوبة، وما إذا كان فحص كلمات المرور المخترقة مفعّلًا.إعادة تعيين كلمة المرور
POST /api/auth/forgot-password
يطلب بريد إعادة تعيين كلمة المرور. تعيد نقطة النهاية دائمًا استجابة نجاح بصرف النظر عن وجود البريد الإلكتروني من عدمه، لمنع تعداد البريد الإلكتروني.
{
"email": "[email protected]"
}POST /api/auth/reset-password
يعيد تعيين كلمة مرور المستخدم باستخدام الرمز الوارد في رابط البريد الإلكتروني.
{
"token": "RESET_TOKEN_FROM_EMAIL",
"newPassword": "new-strong-password"
}الآثار الجانبية لإعادة تعيين كلمة المرور بنجاح:
- يُعاد ضبط عدّاد محاولات تسجيل الدخول الفاشلة إلى صفر
- تُلغى جميع رموز التحديث الموجودة
- يُنشأ ختم أمان جديد (ما يُبطل جميع الجلسات الموجودة)
إعداد MFA والتحقق منه
يدعم Authagonal ثلاث طرق لـ MFA: TOTP (تطبيقات المصادقة)، وWebAuthn (مفاتيح الأمان والقياسات الحيوية)، ورموز الاسترداد ذات الاستخدام الواحد.
إعداد TOTP
POST /api/auth/mfa/totp/setup — يعيد عنوان URI لبيانات رمز QR ومفتاح إدخال يدوي. يمسح المستخدم رمز QR بتطبيق المصادقة لديه (Google Authenticator، Authy، 1Password، وغيرها)، ثم يؤكد التسجيل.
POST /api/auth/mfa/totp/confirm — يؤكد تسجيل TOTP عبر التحقق من رمز مكوّن من 6 أرقام من تطبيق المصادقة.
{
"code": "123456"
}إعداد WebAuthn
POST /api/auth/mfa/webauthn/setup: يعيد خيارات إنشاء بيانات الاعتماد لـ WebAuthn API. يستدعي المتصفح navigator.credentials.create() بهذه الخيارات.
POST /api/auth/mfa/webauthn/confirm — يؤكد تسجيل WebAuthn عبر إرسال استجابة الإثبات من المتصفح.
رموز الاسترداد
POST /api/auth/mfa/recovery/generate — ينشئ 10 رموز استرداد من 8 أحرف تُستخدم مرة واحدة. يمكن استخدام كل رمز مرة واحدة بالضبط لتجاوز MFA.
تُعرض رموز الاسترداد مرة واحدة فقط
التحقق من MFA
POST /api/auth/mfa/verify — يكمل تحدي MFA بعد تسجيل دخول ناجح بكلمة المرور.
| الحقل | مطلوب | الوصف |
|---|---|---|
challengeId | نعم | معرّف التحدي من استجابة تسجيل الدخول |
method | نعم | "totp" أو "recovery" أو "webauthn" |
code | TOTP / الاسترداد | رمز TOTP من 6 أرقام أو رمز استرداد من 8 أحرف |
assertion | WebAuthn | استجابة التأكيد من navigator.credentials.get() |
حالة MFA
GET /api/auth/mfa/status — يعيد طرق MFA المسجَّلة حاليًا للمستخدم.
تدفق تسجيل الدخول عبر SSO
يدعم Authagonal اتصالات SSO القائمة على SAML 2.0 وعلى OIDC. يكتشف التوجيه القائم على النطاق تلقائيًا أي موفّر SSO يجب استخدامه بناءً على عنوان البريد الإلكتروني للمستخدم.
فحص SSO
GET /api/auth/[email protected]
| الحقل | النوع | الوصف |
|---|---|---|
ssoRequired | boolean | ما إذا كان نطاق البريد الإلكتروني يتطلب SSO |
providerType | string | "saml" أو "oidc" |
connectionId | string | معرّف اتصال SSO |
redirectUrl | string | عنوان URL الذي يُعاد توجيه المستخدم إليه لتسجيل الدخول عبر SSO |
تدفق SAML
يُعاد توجيه المستخدم إلى GET /saml/{connectionId}/login الذي يرسل طلب SAML AuthnRequest إلى موفّر الهوية. يصادق موفّر الهوية المستخدم ويرسل استجابة SAML إلى نقطة نهاية خدمة استهلاك التأكيد (ACS). يتحقق Authagonal من التأكيد، وينشئ المستخدم أو يحدّثه، ويوقّع ملف تعريف ارتباط للجلسة.
تتوفر البيانات الوصفية لـ SAML لتهيئة موفّر الهوية لديك على GET /saml/{connectionId}/metadata.
تدفق OIDC
يُعاد توجيه المستخدم إلى GET /oidc/{connectionId}/login الذي يعيد التوجيه إلى موفّر الهوية الأعلى مع PKCE. بعد مصادقة المستخدم، يبادل رد النداء عند /oidc/callback رمز التفويض، ويتحقق من رمز الهوية، وينشئ المستخدم أو يحدّثه.
التزويد في الوقت المناسب (JIT): يدعم تدفقا SAML وOIDC التزويد في الوقت المناسب. إذا لم يكن المستخدم موجودًا بالفعل في المستأجر، يُنشأ تلقائيًا من مطالبات موفّر الهوية. وإن كان موجودًا، تُحدَّث سمات ملفه الشخصي لتطابق أحدث القيم من الموفّر.
التوجيه القائم على النطاق
بناء واجهة تسجيل دخول مخصصة
استبدل شاشات تسجيل الدخول والتسجيل وإعادة تعيين كلمة المرور وMFA المُستضافة من Authagonal بواجهتك الخاصة، بينما يواصل Authagonal التعامل مع المصادقة وMFA وSSO والجلسات وإصدار الرموز. مساران: استخدم مكتبة مكوّنات React لدينا، أو استدعِ واجهة API للمصادقة مباشرةً من أي إطار عمل. وهي ميزة اختيارية، فعّل أولاً واجهة تسجيل الدخول المخصصة في إعدادات المستأجر.


شرط مسبق: نطاق مخصص على جذرك
جلسة تسجيل الدخول هي ملف تعريف ارتباط من الطرف الأول، لذا يجب أن تشترك واجهتك وخادم مصادقة Authagonal في نطاق قابل للتسجيل. وجّه نطاق مصادقة مخصصاً إلى Authagonal على الجذر نفسه الذي يعمل عليه تطبيقك، مثل المصادقة على login.acme.com والتطبيق على app.acme.com. ويبقى إعداد واجهة تسجيل الدخول المخصصة معطّلاً حتى يوجد نطاق مخصص نشط.
| واجهتك | مضيف المصادقة | يعمل؟ |
|---|---|---|
| app.acme.com | login.acme.com | ✅ الجذر نفسه |
| acme.com | auth.acme.com | ✅ الجذر نفسه |
| app.acme.com | acme.authagonal.io | ❌ عبر المواقع |
| myapp.io | login.acme.com | ❌ عبر المواقع |
لماذا يُشترط نطاق مخصص
أضف أيضاً أصل واجهتك (مثل https://app.acme.com) إلى أصول CORS المسموح بها لعميل OAuth الخاص بك، وهي القائمة نفسها التي تضبطها لتبادل الرموز.
React: @authagonal/login
npm i @authagonal/login يشحن منطق المصادقة وواجهة المستخدم في حزمة واحدة، وهي نفسها التي بُني عليها تسجيل الدخول المُستضاف من Authagonal. اختر مستواك:
- تطبيق كامل، أدرج
Appونسّقه عبر العلامة التجارية. - تركيب الصفحات، استخدم
LoginPageوMfaChallengePageوResetPasswordPage… داخل تخطيطك الخاص. - العناصر الأولية والمنطق، ابنِ شاشاتك الخاصة باستخدام
AuthLayout/Button/Inputوعميل API (loginوmfaVerifyوforgotPassword…).
import { AuthLayout, Input, Button, login, ApiRequestError } from '@authagonal/login';
function MyLogin() {
async function onSubmit(email: string, password: string) {
try {
const res = await login({ email, password }); // POST /login (sets the session cookie)
if (res.mfaRequired) {/* render your MFA step → mfaVerify(...) */}
else window.location.href = res.returnUrl; // hand off to /connect/authorize
} catch (e) {
if (e instanceof ApiRequestError) {/* show e.message */}
}
}
return <AuthLayout>{/* your own markup + <Input/> <Button/> */}</AuthLayout>;
}أي إطار عمل: استدعِ واجهة API للمصادقة
لست على React؟ استدعِ نقاط نهاية تدفق المصادقة مباشرةً (تحت /api/auth)، ثم سلّم إلى تدفق OIDC القياسي /connect/authorize. أرسل credentials: 'include' كي يُخزَّن ملف تعريف ارتباط الجلسة.
| نقطة النهاية | الغرض |
|---|---|
POST /api/auth/login | المصادقة؛ تعيد mfaRequired أو عنوان URL للعودة |
POST /api/auth/register | التسجيل بالخدمة الذاتية (عند تفعيله) |
POST /api/auth/forgot-password | بدء إعادة تعيين كلمة المرور |
POST /api/auth/reset-password | إتمام إعادة تعيين كلمة المرور |
GET /api/auth/password-policy | سياسة كلمة المرور (لعرض القواعد) |
POST /api/auth/mfa/* | إعداد MFA والتحقق منه (TOTP وWebAuthn والاسترداد) |
استخدم credentials: 'include'
# 1. Authenticate (browser fetch — credentials:'include' so the session cookie is stored)
curl -i -X POST https://login.acme.com/api/auth/login \
-H "Content-Type: application/json" \
-H "Origin: https://app.acme.com" \
--data '{"email":"[email protected]","password":"..."}'
# (handle {"mfaRequired":true} → POST /api/auth/mfa/verify, then continue)
# 2. Hand off to the OAuth flow — top-level navigation to the authorize endpoint with PKCE:
# https://login.acme.com/connect/authorize?client_id=my-app&redirect_uri=...&response_type=code
# &scope=openid%20profile%20email&code_challenge=...&code_challenge_method=S256
# The session cookie (same-site) authenticates the user; you get back a code → exchange at /connect/token.الخطط والحدود
يقدّم Authagonal أربع مستويات للخطط. تشمل جميع الخطط كل الميزات، والفارق الوحيد هو حد المستخدمين النشطين شهرياً (MAU) وتسعير التجاوز.
مستويات الخطط
| الخطة | حد MAU | التجاوز | تكلفة التجاوز/المستخدم |
|---|---|---|---|
| Starter | 1,000 | لا | — |
| Pro | 5,000 | نعم | $0.04/مستخدم |
| Scale | 25,000 | نعم | $0.025/مستخدم |
| Enterprise | 100,000 | نعم | $0.015/مستخدم |
المستخدمون النشطون شهرياً (MAU)
المستخدم النشط شهرياً هو أي مستخدم فريد يصادق بنجاح مرة واحدة على الأقل خلال شهر الفوترة. أما المستخدمون المُزوَّدون عبر SCIM ولم يسجّلوا الدخول فلا يُحتسبون ضمن إجمالي MAU لديك.
التجاوز إذا كانت خطتك تدعم التجاوز، يُحتسب المستخدمون الذين يتجاوزون حد MAU بالسعر لكل مستخدم المبيّن في جدول الخطط أعلاه. ويمكنك تحديد سقف للتجاوز للحد من إنفاقك الأقصى خلال فترة الفوترة.
التطبيق إذا كانت خطتك لا تدعم التجاوز (Starter)، فلن يتمكن المستخدمون الذين يتجاوزون حد MAU من تسجيل الدخول حتى فترة الفوترة التالية أو حتى ترقّي إلى خطة تدعم التجاوز.
مجموعة الميزات الكاملة في كل خطة