المصادقة الثنائية
قم بتأمين حسابك باستخدام المصادقة الثنائية المبنية على TOTP
أضف طبقة أمان إضافية إلى حساب MailLand الخاص بك باستخدام المصادقة الثنائية المبنية على TOTP. عند تفعيلها، يتطلب تسجيل الدخول كلاً من كلمة المرور ورمز زمني من تطبيق المصادقة.
إعداد المصادقة الثنائية
بدء الإعداد
POST https://api.mail.land/v1/auth/2fa/setupcurl -X POST https://api.mail.land/v1/auth/2fa/setup \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."يُرجع مفتاح TOTP، ورمز QR، ورموز الاسترداد الاحتياطية:
{
"secret": "JBSWY3DPEHPK3PXP",
"secretMasked": "JBSW...3PXP",
"otpAuthUri": "otpauth://totp/MailLand:[email protected]?secret=JBSWY3DPEHPK3PXP&issuer=MailLand",
"qrCodeDataUri": "data:image/png;base64,iVBORw0KGgo...",
"backupCodes": [
"A1B2C3D4",
"E5F6G7H8",
"I9J0K1L2",
"M3N4O5P6",
"Q7R8S9T0",
"U1V2W3X4",
"Y5Z6A7B8",
"C9D0E1F2",
"G3H4I5J6",
"K7L8M9N0"
]
}| الحقل | النوع | الوصف |
|---|---|---|
secret | string | مفتاح TOTP المشفر بـ Base32 (للإدخال اليدوي) |
secretMasked | string | نسخة مقنّعة من المفتاح، آمنة للعرض في السجلات/الواجهة |
otpAuthUri | string | معرّف URI لتطبيقات المصادقة |
qrCodeDataUri | string | صورة رمز QR بصيغة data URI |
backupCodes | string[] | 10 رموز احتياطية للاستخدام لمرة واحدة، كل منها 8 أحرف (A-Z2-9) |
احفظ رموز الاسترداد العشرة الآن: استجابة الإعداد هي المكان الوحيد الذي تظهر فيه على الإطلاق. عملية enable تؤكد فقط تفعيل المصادقة الثنائية؛ ولا تُعيد الرموز مرة أخرى.
امسح رمز QR باستخدام تطبيق مصادقة (Google Authenticator أو Authy أو 1Password وغيرها) أو أدخل المفتاح يدوياً.
تفعيل المصادقة الثنائية
أكّد الإعداد بتقديم رمز من تطبيق المصادقة:
POST https://api.mail.land/v1/auth/2fa/enable{
"code": "123456"
}curl -X POST https://api.mail.land/v1/auth/2fa/enable \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{"code": "123456"}'{
"message": "Two-factor authentication enabled successfully"
}استجابة enable لا تُعيد رموز النسخ الاحتياطي: فقد ظهرت مرة واحدة فقط في استجابة الإعداد أعلاه. يمكن استخدام كل رمز مرة واحدة لتسجيل الدخول في حال فقدان الوصول إلى تطبيق المصادقة.
التحقق من رمز
عندما يُرجع تسجيل الدخول requiresTwoFactor: true، أكمل المصادقة بالتحقق من رمز TOTP:
POST https://api.mail.land/v1/auth/2fa/verify{
"challengeId": "2fa_challenge_abc123",
"code": "123456",
"trustDevice": true
}trustDevice اختياري. عند تعيينه إلى true، يتم تذكر الجهاز لمدة 30 يوماً وتُتخطى المصادقة الثنائية في تسجيلات الدخول اللاحقة منه.
curl -X POST https://api.mail.land/v1/auth/2fa/verify \
-H "Content-Type: application/json" \
-d '{
"challengeId": "2fa_challenge_abc123",
"code": "123456"
}'{
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
"refreshToken": "rt_a1b2c3d4e5...",
"deviceTrusted": false
}لا يوجد expiresIn ولا كائن user في هذه الاستجابة. تكون قيمة deviceTrusted هي true عندما كان trustDevice مضبوطاً على true. أما رمز الجهاز نفسه فلا يظهر في جسم الاستجابة أبداً: تضعه الواجهة البرمجية في ملف تعريف الارتباط HttpOnly المسمى __Host-trusted_device، ويرسله المتصفح عند تسجيل الدخول التالي.
استخدام رمز النسخ الاحتياطي
في حال فقدان الوصول إلى تطبيق المصادقة، استخدم رمز نسخ احتياطي بدلاً منه:
POST https://api.mail.land/v1/auth/2fa/verify-backup{
"challengeId": "2fa_challenge_abc123",
"code": "a1b2c3d4"
}الحقل هو code (8-10 أحرف)، وليس backupCode.
curl -X POST https://api.mail.land/v1/auth/2fa/verify-backup \
-H "Content-Type: application/json" \
-d '{
"challengeId": "2fa_challenge_abc123",
"code": "a1b2c3d4"
}'يُرجع الاستجابة ذاتها كالتحقق عبر TOTP. يمكن استخدام كل رمز نسخ احتياطي مرة واحدة فقط.
إعادة توليد رموز النسخ الاحتياطي
أنشئ مجموعة جديدة من رموز النسخ الاحتياطي (يبطل كل الرموز السابقة). يتطلب رمز TOTP حالي:
POST https://api.mail.land/v1/auth/2fa/backup-codes/regenerate{
"code": "123456"
}curl -X POST https://api.mail.land/v1/auth/2fa/backup-codes/regenerate \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{"code": "123456"}'[
"X2Y3Z4A5",
"B6C7D8E9",
"F2G3H4J5",
"K6L7M8N9",
"P2Q3R4S5",
"T6U7V8W9",
"X6Y7Z8A9",
"B2C3D4E5",
"F6G7H8J9",
"K2L3M4N5"
]الاستجابة عبارة عن مصفوفة JSON مجردة من السلاسل النصية، وليست { "backupCodes": [...] }.
التحقق من حالة المصادقة الثنائية
GET https://api.mail.land/v1/auth/2fa/statuscurl https://api.mail.land/v1/auth/2fa/status \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."{
"isEnabled": true,
"enabledAt": "2026-01-15T10:00:00Z",
"backupCodesRemaining": 6,
"trustedDevicesCount": 2
}الأجهزة الموثوقة
عند التحقق من المصادقة الثنائية، يمكن تذكّر الجهاز لتخطي المصادقة الثنائية في عمليات تسجيل الدخول المستقبلية من المتصفح ذاته.
قائمة الأجهزة الموثوقة
GET https://api.mail.land/v1/auth/2fa/devicescurl https://api.mail.land/v1/auth/2fa/devices \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."[
{
"id": "dev_a1b2c3d4e5",
"deviceName": "Chrome on macOS",
"ipAddress": "203.0.113.10",
"createdAt": "2026-01-20T14:00:00Z",
"expiresAt": "2026-02-19T14:00:00Z",
"lastUsedAt": "2026-02-17T09:00:00Z",
"isCurrent": true
},
{
"id": "dev_f6g7h8i9j0",
"deviceName": "Firefox on Windows",
"ipAddress": "198.51.100.24",
"createdAt": "2026-02-01T08:00:00Z",
"expiresAt": "2026-03-03T08:00:00Z",
"lastUsedAt": "2026-02-16T15:30:00Z",
"isCurrent": false
}
]الاستجابة عبارة عن مصفوفة مجردة، وليست { "devices": [...] }، والحقول هي deviceName وipAddress وexpiresAt وisCurrent بدلاً من name.
إلغاء ثقة جهاز
DELETE https://api.mail.land/v1/auth/2fa/devices/{id}يعيد 204 عند النجاح، أو 404 RESOURCE_NOT_FOUND إذا كان معرّف الجهاز لا يخص المستخدم الحالي.
curl -X DELETE https://api.mail.land/v1/auth/2fa/devices/dev_a1b2c3d4e5 \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."إلغاء ثقة جميع الأجهزة
DELETE https://api.mail.land/v1/auth/2fa/devicescurl -X DELETE https://api.mail.land/v1/auth/2fa/devices \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."يُلغي ثقة جميع الأجهزة، مما يستوجب التحقق من المصادقة الثنائية عند تسجيل الدخول التالي من كل جهاز.
يؤدي تغيير كلمة المرور أو إعادة تعيينها أو تسجيل الخروج من جميع الجلسات (POST /v1/auth/revoke-all-tokens) أيضًا إلى إلغاء ثقة جميع الأجهزة بالطريقة نفسها.
تعطيل المصادقة الثنائية
POST https://api.mail.land/v1/auth/2fa/disable{
"code": "123456"
}curl -X POST https://api.mail.land/v1/auth/2fa/disable \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{"code": "123456"}'يتطلب رمز TOTP أو رمز نسخ احتياطي صالح لتأكيد العملية: يُجرَّب رمز TOTP أولاً، ولا يُقبل رمز النسخ الاحتياطي إلا إذا فشل التحقق من TOTP. يؤدي تعطيل المصادقة الثنائية إلى إبطال جميع رموز النسخ الاحتياطي والأجهزة الموثوقة.
استجابات الخطأ
معظم حالات الفشل (رمز غير صالح أو منتهي الصلاحية، حالة خاطئة، إعادة استخدام رمز نسخ احتياطي) تُعيد 400 INVALID_REQUEST مع رسالة. أما جسم الطلب غير الصالح (طول رمز خاطئ، challengeId مفقود، إلخ) فيفشل في التحقق من صحة الحقول أولاً ويُعيد 400 VALIDATION_FAILED بدلاً من ذلك. الجهاز غير المعروف يُعيد 404 RESOURCE_NOT_FOUND. لا يوجد رمز منفصل مثل INVALID_CODE أو TWO_FACTOR_* أو CHALLENGE_EXPIRED.
| الحالة | الرمز | الوصف |
|---|---|---|
400 | INVALID_REQUEST | رمز غير صالح أو منتهي الصلاحية، حالة خاطئة، إعادة استخدام رمز نسخ احتياطي، إلخ |
400 | VALIDATION_FAILED | فشل التحقق من صحة حقول الطلب (مثل طول رمز خاطئ أو حقل مفقود) |
404 | RESOURCE_NOT_FOUND | الجهاز غير موجود |
الخطوات التالية
- المصادقة: تسجيل الدخول وإدارة الرموز
- إدارة الفريق: إدارة وصول الفريق
- مساحات العمل: إعدادات مساحة العمل