الانتقال إلى المحتوى الرئيسي

المصادقة

تستخدم جميع واجهات برمجة تطبيقات IDCloud (عقدا Web & SDK و API) OAuth2 مع نوع منح JWT Bearer (RFC 7523). تقوم بإنشاء تأكيد JWT قصير الأجل على الخادم الخلفي الخاص بك، وتبادله برمز Bearer، ثم تستخدم هذا الرمز في كل استدعاء لاحق.

لا تقم بذلك أبدًا على جانب العميل

يجب إنشاء تأكيد JWT على الخادم الخلفي فقط. لا تعرض مفتاحك الخاص في كود الواجهة الأمامية أو التطبيقات المحمولة أو المستودعات أو السجلات.

الحصول على بيانات الاعتماد

قبل أن تتمكن من إنشاء الرموز، تحتاج إلى حساب خدمة يتم توفيره بواسطة Unico. تواصل مع دعم Unico وقدّم:

  • اسم حساب الخدمة (بحد أقصى 12 حرفًا)
  • اسم الشخص المسؤول، بريده الإلكتروني ورقم هاتفه (أرقام البرازيل أو الولايات المتحدة أو المكسيك فقط)

ستحصل على:

  • اسم حساب فريد
  • معرف المستأجر (Tenant ID)
  • حمولة JWT الأساسية
  • ملف المفتاح الخاص (بصيغة .pem)
حساب لكل بيئة

احتفظ بحسابات خدمة منفصلة لبيئتي UAT والإنتاج.

بناء تأكيد JWT

التأكيد هو JWT بصيغة JWS المضغوطة: {Base64url(Header)}.{Base64url(Payload)}.{Base64url(Signature)}.

Header
{
"alg": "RS256",
"typ": "JWT"
}
Payload
الحقلالقيمةملاحظات
iss<account_name>@<tenant_id>.iam.acesso.ioمُقدَّم مع بيانات الاعتماد الخاصة بك
audhttps://identityhomolog.acesso.io (UAT) أو https://identity.acesso.io (الإنتاج)يجب أن يتطابق مع مضيف نقطة نهاية الرمز
scope*يمنح جميع الأذونات
iatالطابع الزمني Unix (بالثواني)وقت إصدار JWT
expiat + بحد أقصى 3600لا يمكن تجاوز ساعة واحدة من iat
{
"aud": "https://identity.acesso.io",
"scope": "*",
"iat": 1738086000,
"exp": 1738089600
}
Signature

قم بتوقيع الترويسة والحمولة باستخدام RS256 (RSA + SHA-256) مع المفتاح الخاص .pem المُقدَّم من Unico.

لا تضف حقولًا إضافية

أي حقل غير مُدرج أعلاه (مثل sub أو jti أو nbf) سيُسبب خطأ 1.2.22. استخدم الحقول المُوضحة فقط.

طلب الرمز

نقطة نهاية الرمز هي نفسها لكلا العقدين:

البيئةنقطة النهاية
الإنتاجPOST https://identity.acesso.io/oauth2/token
UATPOST https://identityhomolog.acesso.io/oauth2/token
Request
المعاملالقيمة
Content-Typeapplication/x-www-form-urlencoded
grant_typeurn:ietf:params:oauth:grant-type:jwt-bearer
assertionJWT الموقَّع الخاص بك
curl -X POST https://identity.acesso.io/oauth2/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer" \
-d "assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
Response
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600
}
الحقلالنوعالوصف
access_tokenstringرمز وصول JWT. استخدمه في Authorization: Bearer <token> في جميع استدعاءات API.
expires_inintegerوقت انتهاء الصلاحية بالثواني. مثال: 3600.
token_typestringدائمًا Bearer.

استخدام الرمز

أضف الرمز إلى ترويسة Authorization في كل طلب API. الترويسة متطابقة لكلا العقدين — ما يختلف هو المضيف والمسار لواجهة برمجة التطبيقات التي تستدعيها:

العقدمضيف الإنتاجمضيف UAT
Web & SDKhttps://api.idcloud.unico.apphttps://api.idcloud.uat.unico.app
APIhttps://api.id.unico.apphttps://api.id.uat.unico.app

Web & SDKAuthorization هي ترويسة المصادقة الوحيدة المطلوبة:

curl -X POST https://api.idcloud.unico.app/client/v1/process \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{ ... }'

API — تُستخدم Authorization إلى جانب ترويسة APIKEY:

curl -X POST https://api.id.unico.app/processes/v1 \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "APIKEY: $API_KEY" \
-H "Content-Type: application/json" \
-d '{ ... }'

تجديد الرمز

تنتهي صلاحية الرموز بعد 3600 ثانية. طبّق التجديد الاستباقي في الخادم الخلفي الخاص بك:

  • تتبع expires_in من استجابة الرمز وقم بتخزين طابع انتهاء الصلاحية.
  • اطلب رمزًا جديدًا عندما يتبقى 10 دقائق أو أقل قبل انتهاء الصلاحية.
  • لا تنتظر أبدًا حدوث خطأ 401 في الإنتاج لبدء التجديد.

مرجع API

المواصفات الكاملة لـ OpenAPI الخاصة بنقطة نهاية الرمز متاحة في authentication.yaml.

الطريقةالمسارالوصف
POST/oauth2/tokenتبادل تأكيد JWT موقَّع للحصول على رمز وصول Bearer

رموز الخطأ

الرمزالوصفالإجراء
1.0.1المعرف المُقدَّم في تكوين iss غير صحيحتحقق من أن حقل iss يطابق معرف المستأجر المُقدَّم عند إنشاء المفتاح الخاص
1.0.14التطبيق غير نشطتحقق مع مدير المشروع ما إذا كان التطبيق المستخدم نشطًا
1.1.1لم يتم توفير معامل scopeأضف "scope": "*" إلى حمولة JWT الخاصة بك
1.2.4تأكيد JWT غير صالحتأكيد JWT لم يعد صالحاً. سببان: (أ) الوقت الحالي تجاوز exp (انتهت صلاحية JWT فعلاً — أنشئ تأكيداً جديداً لكل طلب رمز)؛ أو (ب) تتجاوز exp قيمة iat + 3600 (مدة الصلاحية طويلة جداً — حدد exp بـ iat + 3600 كحد أقصى).
1.2.5فشل التحقق من JWTلا يمكن التحقق من JWT. تحقق من المعاملات وتأكد من توقيعه بـ RS256 والمفتاح الخاص الصحيح
1.2.6المفتاح الخاص لم يعد صالحًاالمفتاح الخاص المستخدم لتوقيع JWT لم يعد مقبولًا. اطلب بيانات اعتماد جديدة للحساب
1.2.7JWT مستخدم بالفعلJWT لم يعد مقبولًا لأنه استُخدم بالفعل. أنشئ تأكيدًا جديدًا لكل طلب رمز
1.2.11الحساب غير نشطالحساب المستخدم غير نشط
1.2.14الحساب يفتقر إلى الأذونات اللازمةالحساب المستخدم لا يملك الأذونات اللازمة
1.2.18الحساب مقفل مؤقتًاتم قفل الحساب مؤقتًا بسبب تجاوز عدد محاولات المصادقة غير الصالحة
1.2.19انتحال هوية مستخدم غير مصرح بهيحتوي JWT على حقل sub يُشير إلى حساب غير مصرح له بانتحال الهوية. احذف حقل sub من الحمولة.
1.2.20فشل فك تشفير JWTفشل فك تشفير JWT. تحقق من تنسيق الرمز وأنه موقَّع بـ RS256.
1.2.21مفتاح خاص خاطئ / فشل المصادقةتعذّر التحقق من توقيع JWT مقابل أي مفتاح معروف لهذا الحساب. تأكد من استخدام ملف .pem الصحيح لحساب الخدمة والبيئة المناسبة.
1.2.22حقول غير مسموح بها في الحمولةيحتوي JWT على حقول حمولة إضافية غير مسموح بها. احذف أي حقول غير مُدرجة في هذا الدليل (مثل sub، jti، nbf). ملاحظة: إذا أدرجت حقل sub وظهر لك الخطأ 1.2.19 بدلاً منه، فذلك الخطأ يأخذ الأولوية.
1.3.1قيود الوصول عبر IPعنوان IP الخاص بك ليس في القائمة البيضاء لهذا الحساب
1.3.2قيود الوصول بناءً على الوقتالطلب خارج نافذة الوقت المسموح بها لهذا الحساب

ما التالي