> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# طرق تسجيل الدخول: Passkeys والرموز والاجتماعي وSSO

> اضبط تسجيل الدخول في Didit بكلمة المرور أو الرمز أو الرابط السحري أو المفتاح الأمني أو SSO، مع MFA وإعادة تعيين كلمة المرور.

> [!WARNING]
>
> المصادقة ميزة جديدة. تدعم صفحة تسجيل الدخول المستضافة جميع الطرق الواردة في هذه الصفحة. أما نقاط نهاية JSON المذكورة هنا فهي مخصّصة للفرق التي تبني شاشات تسجيل الدخول الخاصة بها (`sign_in_ui: "own"`).

لتفعيل طريقة، أرسل `PUT methods/{name}/` مع `{"enabled": true}` إلى واجهة إدارة المصادقة في تطبيقك، أو فعّلها من وحدة التحكم. تعرض صفحة تسجيل الدخول المستضافة الطرق التي فعّلتها فقط.

| الطريقة | الاسم | الإعداد |
| - | - | - |
| كلمة المرور | `password` | مطلوبة أيضاً للتسجيل بالبريد الإلكتروني وكلمة المرور. |
| رمز البريد الإلكتروني | `code` | لا يتطلب إعداداً. |
| الرابط السحري | `magic` | لا يتطلب إعداداً. متاح في الصفحات المستضافة فقط. |
| رمز الهاتف | `phone` | أرسل `workflow_id` لسير عمل يتضمن التحقق من رقم الهاتف. |
| مفتاح المرور | `passkey` | لا يتطلب إعداداً. |
| تسجيل الدخول عبر حسابات التواصل | `google`, `microsoft`, `apple`, `github` | `client_id` و`client_secret` الخاصان بك. يمكن لتطبيقات البيئة التجريبية استخدام تطبيقات الاختبار الخاصة بـ Didit بدلاً من ذلك (`credential_source: "didit_test"`). |
| تسجيل الدخول الموحّد للمؤسسات (SSO) | `sso` | اتصال SAML أو OIDC لكل مؤسسة عميلة. |
| محفظة Didit ID | `wallet` | مفعّلة دائماً. لا يمكن إيقافها. |

تبدأ كل استدعاء JSON في هذه الصفحة بـ `transaction` يصدر عن `POST authorize/`. وتستمر المعاملة 10 دقائق. عند نجاح تسجيل الدخول، تُعيد الاستجابة `{code, redirect_uri, state}`. استبدل الرمز عبر `POST token/` خلال 60 ثانية (راجع [token وJWKS](https://docs.didit.me/ar/authentication/tokens-and-jwks.md)).

بدلاً من الرمز، يمكن أن تُعيد استدعاءات تسجيل الدخول إحدى هذه الخطوات. أكمل الخطوة، ثم ستحصل على الرمز.

| الاستجابة | الخطوة التالية |
| - | - |
| `mfa_required` مع `challenge` و`factors` | أرسل رمز TOTP أو رمز الاسترداد، أو استخدم مفتاح المرور (راجع [MFA](#mfa)). |
| `mfa_enrollment_required` مع `challenge` و`uri` | تفرض سياسة MFA استخدام تطبيق مصادقة. سجّله باستخدام `POST mfa/setup/`. |
| `protection_required` مع `challenge` و`methods` | تطلب سياسة [حماية من الروبوتات](https://docs.didit.me/ar/authentication/bot-protection.md) إثباتاً إضافياً. |
| `verification_required` مع `verification_url` | تتطلب إعدادات التحقق لديك فحص حيوية أو فحص هوية عند التسجيل أو تسجيل الدخول. أرسل الشخص إلى `verification_url` (صالح لمدة 30 دقيقة)، ويأتي الرمز بعد اجتياز فحص مقبول. |

## كلمة المرور

يقبل `POST password/` القيم `transaction` و`email` و`password`.

* يجب أن تستوفي كلمة المرور الحد الأدنى `password_min_length` الذي حددته (8 أو 10 أو 12 أو 14 حرفاً؛ والافتراضي 10). تُرفض كلمات المرور الشائعة وكلمات المرور الرقمية بالكامل مع الخطأ `password_policy`. وعند تفعيل [فحص كلمات المرور المسرّبة](https://docs.didit.me/ar/authentication/bot-protection.md#كلمات-المرور-المسرّبة)، تُرفض كلمة المرور المعروفة بأنها سُرّبت بالخطأ `password_breached`.
* لا يمكن تسجيل الدخول بكلمة المرور إلا لمن لديهم بريد إلكتروني متحقَّق منه.
* كلمة المرور الخاطئة، والبريد الإلكتروني غير المعروف، والبريد غير المتحقَّق منه، والحساب المقفل، والحساب المحظور، كلها تحصل على الإجابة نفسها: `400 {"error": "invalid_credentials"}`. لا تستطيع واجهتك معرفة أي منها حدث، ولا يستطيع المهاجم معرفة ذلك أيضاً.

### إنشاء الحساب

يتحقق التسجيل من البريد الإلكتروني أولاً. استدعِ `POST email/start/` مع `purpose: "signup"` و`email` و`password`، ثم استدعِ `POST email/complete/` مع الرمز. يُنشأ الحساب ببريد إلكتروني متحقَّق منه.

* يحدد `signup_policy` من يمكنه التسجيل: `anyone` (أي شخص)، أو `invited` (بوجود رابط دعوة فقط)، أو `allowed_domains` (النطاقات المسموح بها).
* مع `allow_subaddresses: false` (الافتراضي)، يُرفض أي عنوان يحتوي على `+` في الجزء المحلي منه.
* عندما تتضمن إعدادات علامتك التجارية روابط الشروط أو الخصوصية، يطلب نموذج التسجيل المستضاف من الشخص قبولها.

## رمز البريد الإلكتروني

يقبل `POST email/start/` القيم `transaction` و`purpose` (وهي `login` أو `signup`) و`email`، ويُعيد `202 {challenge, expires_in: 600}`. يتلقى الشخص رمزاً مكوناً من 6 أرقام صالحاً لمدة 10 دقائق.

يقبل `POST email/complete/` القيم `transaction` و`purpose` و`challenge` و`code`. لديك 5 محاولات، وبعدها يجب على الشخص طلب رمز جديد. تتيح الصفحة المستضافة طلب رمز جديد بعد 30 ثانية.

إذا أُرسل رمز تسجيل دخول إلى عنوان بريد لا يملك حساباً، فسيُنشأ حساب جديد عند السماح بذلك في `signup_policy`. وهذا هو التسجيل بلا كلمة مرور.

## الرابط السحري

ترسل الصفحة المستضافة رابط تسجيل دخول صالحاً لمدة 15 دقيقة. يبقى الرابط مرتبطاً بالمعاملة الأصلية لـ PKCE، لذا يعمل فقط ضمن التدفق الذي بدأه. يؤكد الشخص تسجيل الدخول في الصفحة التي يفتحها الرابط. لا توجد نقطة نهاية JSON للروابط السحرية.

## رمز الهاتف

يقبل `POST phone/start/` القيم `transaction` و`phone` و`channel` الاختيارية (وهي `sms`، وهي الافتراضية، أو `whatsapp`). تُوحَّد صيغة الرقم إلى E.164. ويُعيد `202 {challenge, expires_in: 600}`.

يقبل `POST phone/complete/` القيم `transaction` و`challenge` والرمز `code` المكوّن من 6 أرقام. لديك 5 محاولات.

* تُرسل رموز الهاتف عبر التحقق من رقم الهاتف في Didit. فعّل الطريقة باستخدام `workflow_id` لسير عمل يتضمن التحقق من رقم الهاتف.
* لا يُنشئ أول تسجيل دخول بالهاتف حساباً إلا عندما يكون `signup_policy` مساوياً لـ `anyone`.
* إذا فشل الإرسال، تُعيد الاستدعاء `503 {"error": "delivery_unavailable"}`.

## مفاتيح المرور

تعتمد مفاتيح المرور على WebAuthn. الطرف المعتمِد هو أصل تسجيل الدخول في تطبيقك. يطلب Didit بيانات اعتماد قابلة للاكتشاف (مفتاح مقيم) ويشترط دائماً التحقق من المستخدم، مثل بصمة الإصبع أو الوجه أو رمز PIN للجهاز. لا يطلب Didit الإقرار.

| الاستدعاء | الجسم | النتيجة |
| - | - | - |
| `POST passkeys/begin/` | `{transaction}` | `{challenge, options}` لاستخدامها مع `navigator.credentials.get()`. لا تُرسل قائمة بيانات الاعتماد، فيعرض المتصفح كل مفاتيح المرور لأصل تطبيقك. |
| `POST passkeys/complete/` | `{challenge, credential}` | رمز تسجيل دخول، أو خطوة تالية. |
| `POST passkeys/register/` | فارغ، مع `Authorization: Bearer <access_token>` | خيارات لاستخدامها مع `navigator.credentials.create()`. |
| `POST passkeys/confirm/` | `{challenge, credential}`، مع token نفسه | `{id}` لمفتاح المرور الجديد. |

* يستمر تحدي مفتاح المرور 5 دقائق.
* إضافة مفتاح مرور تتطلب جلسة أُنشئت خلال آخر 5 دقائق. وإلا تُعيد الاستدعاء `403 {"error": "reauthentication_required"}`. أعِد تسجيل دخول الشخص أولاً.
* يُعد تسجيل الدخول بمفتاح المرور مصادقة متعددة العوامل.
* بعد التسجيل، تتيح الصفحة المستضافة إضافة مفتاح مرور (`passkeys/setup/begin/` و`passkeys/setup/complete/`).
* يمكن لتطبيقات Android المسجّلة في التطبيق استخدام مفاتيح المرور نفسها.

## تسجيل الدخول الاجتماعي

يستخدم تسجيل الدخول عبر Google وMicrosoft وApple وGitHub بيانات اعتماد تطبيق OAuth الخاص بك، وتُضبط باستخدام `PUT methods/{provider}/` و`credentials: {client_id, client_secret}`. يكون رابط الاستدعاء لدى المزوّد على أصل تسجيل الدخول الخاص بك.

عند أول تسجيل دخول لأي شخص عبر مزوّد، يثبت أيضاً ملكيته لعنوان البريد الإلكتروني برمز يُرسل إليه (`POST social/email/start/` و`POST social/email/verify/`). تتجاوز عمليات تسجيل الدخول اللاحقة عبر المزوّد نفسه هذه الخطوة.

لا يستطيع GitHub إثبات تسجيل دخول حديث، لذلك لا يُعرض عند إرسال `prompt=login` أو `max_age`.

## تسجيل الدخول الموحّد للمؤسسة

يتيح تسجيل الدخول الموحّد للمؤسسة لشركة العميل أن يسجّل الدخول عبر مزوّد الهوية الخاص بها بصيغة SAML أو OIDC. يُضبط لكل مؤسسة عميلة على المسار `organizations/{id}/sso/` باستخدام `protocol` (`saml` أو `oidc`) و`enabled` و`config`.

* يمكنك إرسال رابط إعداد إلى فريق تقنية المعلومات لدى العميل، ويبقى صالحاً لمدة 7 أيام.
* تُنشر بيانات مزوّد خدمة SAML الخاص بك الوصفية على `{origin}/sso/saml/metadata/`.
* يحدّد تسجيل الدخول المستضاف الاتصال من نطاق البريد الإلكتروني المُتحقَّق منه للشخص، أو من `organization=<slug>` في عنوان URL لتسجيل الدخول.

## Didit ID Wallet

يمكن للأشخاص الذين تحققوا من هويتهم مسبقاً عبر Didit تسجيل الدخول بمحفظة Didit ID Wallet الخاصة بهم. هذه الطريقة مفعّلة دائماً. تحمل `verified_identity` في الجلسة بعد ذلك ما اختار الشخص مشاركته.

## MFA

عامل التحقق الثاني هو تطبيق مصادقة (TOTP) مع رموز استرداد، أو مفتاح مرور.

* يحدد `mfa_policy` من يجب أن يستخدم MFA: `optional` أو `everyone` أو `organization_admins` (وهو الافتراضي). ويجب أن يستخدم كل من سجّل تطبيق مصادقة هذا التطبيق دائماً.
* لتسجيل تطبيق مصادقة، استدعِ `POST mfa/enroll/` بجلسة جديدة (أُنشئت خلال 5 دقائق). تُرجع الاستجابة `{challenge, uri}`؛ اعرض `uri` كرمز QR. ثم أرسل الرمز الأول إلى `POST mfa/confirm/`. تتضمن الاستجابة 10 رموز استرداد يُستخدم كل منها مرة واحدة. اعرضها مرة واحدة فقط.
* عند تسجيل الدخول، أرسل رمز TOTP أو رمز استرداد إلى `POST mfa/complete/` مع `challenge`. لديك 5 محاولات. لاستخدام مفتاح مرور بدلاً من ذلك، استدعِ `POST mfa/passkey/begin/` ثم `POST mfa/passkey/complete/`.
* تستخدم الرموز فترات زمنية مدتها 30 ثانية. لا يمكن إعادة استخدام رمز سبق قبوله.
* رموز الرسائل النصية ورموز البريد الإلكتروني غير متاحة كعوامل تحقق ثانية.

## نسيان كلمة المرور وإعادة تعيينها

يأخذ `POST password-reset/start/` الحقل `email` ويُرجع `202 {"status": "sent", "expires_in": 1800}`. الاستجابة واحدة سواء كان للعنوان حساب أم لا. رابط إعادة التعيين صالح لمدة 30 دقيقة.

يأخذ `POST password-reset/complete/` الحقلين `token` و`password` ويُرجع `{"status": "password_changed"}`. ويقوم أيضاً بما يلي:

* يلغي حالة الحظر.
* ينهي كل الجلسات عند تفعيل `revoke_on_password_change` (وهو الافتراضي).
* يُبطل الرموز والروابط الأخرى المعلّقة لذلك الشخص.

## الدعوات

مع `signup_policy: "invited"`، لا يمكن إنشاء حساب إلا للأشخاص المدعوين. رابط الدعوة صالح لمدة 7 أيام ويفتح صفحة `/invite` المستضافة.

تابع مع [token وJWKS](https://docs.didit.me/ar/authentication/tokens-and-jwks.md)، أو اقرأ [الحماية من الروبوتات](https://docs.didit.me/ar/authentication/bot-protection.md) للاطلاع على حالات الحظر والتحديات.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.