السيناريوهات المناسبة: أنت تطور تطبيقًا تابعًا لجهة خارجية / Agent / عميل MCP / سير عمل آلي، وترغب في أن يسجل المستخدم الدخول بنقرة واحدة باستخدام حساب Ace Data Cloud، وأن تصل عند الحاجة إلى موارده على المنصة، دون أن يضطر المستخدم إلى نسخ ولصق API Key يدويًا.
مرجع سريع للمصطلحات والنقاط الطرفية
جميع النقاط الطرفية موجودة علىhttps://auth.acedata.cloud، ويمكن الحصول على أحدث العناوين في أي وقت عبر نقطة الاكتشاف (Discovery):
القدرات المدعومة:
response_type=code، وgrant_types=authorization_code, refresh_token، وcode_challenge_methods=S256, plain، وطريقة مصادقة العميل client_secret_post (عميل سري) / none (عميل عام باستخدام PKCE).
نطاقات الصلاحيات (Scope)
اطلب وفق مبدأ «أقل صلاحية»، وسيرى المستخدم كل صلاحية تطلبها في صفحة التفويض. فئات الهوية (متوافقة مع OIDC)
فئات موارد المنصة
الفئات المجمعة (تتوسع تلقائيًا)
خاص
تركيبات نموذجية: «تسجيل دخول بنقرة واحدة» لطرف ثالث =openid profile؛ يحتاج عميل MCP / IDE إلى إعداد Key تلقائيًا =openid profile credentials:read credentials:write؛ لوحة إدارة كاملة =openid profile email platform offline_access.
الخطوة 1: تسجيل تطبيق OAuth
افتح auth.acedata.cloud/user/oauth-apps ← «إنشاء تطبيق»، واملأ:- اسم التطبيق / الوصف / Logo: ستظهر في صفحة موافقة المستخدم على التفويض.
- نوع العميل (Client Type):
- سري (confidential) — لديك خلفية خادم ويمكنك حفظ
client_secretبأمان (خدمة Web، خدمة خلفية). - عام (public) — واجهة أمامية فقط / سطح المكتب / CLI / الهاتف المحمول، لا يمكنه حفظ مفتاح سري، ويجب استخدام PKCE.
- سري (confidential) — لديك خلفية خادم ويمكنك حفظ
- عناوين إعادة التوجيه (Redirect URIs): العنوان الذي يُعاد توجيه المستخدم إليه بعد اكتمال التفويض، ويجب أن يتطابق تمامًا مع
redirect_uriالمرسل عند بدء التفويض، ويمكن إدخال عدة عناوين. - نطاقات الصلاحيات (Scopes): حدد نطاقات scope التي تحتاجها من القسم السابق.
client_id؛ وسيعرض العميل السري أيضًا client_secret لمرة واحدة فقط — احفظه فورًا، إذ لا يمكن عرضه مجددًا بعد الإغلاق (يمكن إعادة إنشائه من «تدوير المفتاح / Rotate Secret» في صفحة التفاصيل، وسيصبح المفتاح القديم غير صالح فورًا).
يمكن لكل حساب إنشاء 20 تطبيق OAuth كحد أقصى.
الخطوة 2: إعادة توجيه المستخدم إلى صفحة التفويض
في تطبيقك، أعد توجيه متصفح المستخدم إلى صفحة التفويض مع معاملات الاستعلام:state: أنشئ بنفسك سلسلة عشوائية، وتُعاد كما هي عند الاستدعاء العكسي، وتُستخدم لمنع CSRF، ويجب التحقق منها.- PKCE (إلزامي للعملاء العامين، وموصى به أيضًا للعملاء السريين): أنشئ أولًا
code_verifierعشوائيًا، ثم احسبcode_challenge = BASE64URL( SHA256( code_verifier ) )، وضعcode_challengeفي عنوان URL للتفويض، واحتفظ بـcode_verifierلديك لاستخدامه في الخطوة 4.
<redirect_uri>?error=access_denied&error_description=...&state=...。
مدة صلاحية رمز التفويض 10 دقائق، ولا يمكن استخدامه إلا مرة واحدة.
الخطوة 3: استبدال رمز التفويض برمز مميز
في الخلفية لديك (عميل سري) أو في العميل (عميل عام باستخدام PKCE)، استخدمcode لاستدعاء نقطة طرفية للرموز.
عميل سري (مع client_secret):
refresh_token فقط عند طلب offline_access):
access_token هو JWT، يحتوي على تصريح scope؛ مدة صلاحيته 15 يومًا (عدد ثواني expires_in). مدة صلاحية Refresh Token هي 30 يومًا.
الخطوة 4: استدعاء الواجهة باستخدام Access Token
ضع الرمز المميز في ترويسةAuthorization: Bearer.
قراءة معلومات المستخدم (UserInfo، تُرشَّح الحقول حسب scope المُصرَّح به):
platform.acedata.cloud، المصادقة حسب scope). على سبيل المثال، عند الحصول على credentials:read:
scope داخل JWT — لا يمكن للرمز المميز الوصول إلا إلى الموارد التي فوضها المستخدم. إذا تم الوصول إلى مورد غير مُصرَّح به، فسيُرجع 403.
تحديث الرمز المميز
بعد انتهاء صلاحية Access Token، استخدم Refresh Token لاستبداله بزوج من الرموز المميزة الجديدة (يستلزم طلبoffline_access في الأصل):
إلغاء الرمز المميز
حالة حقيقية: خوادم MCP الخاصة بنا متصلة بهذه الطريقة تمامًا
إن خوادم MCP البالغ عددها أكثر من 15 لدى Ace Data Cloud (NanoBanana وMidjourney وSuno وSeedance وKling…) التي تظهر فيها وصلة «Sign in with Ace Data Cloud» في Claude Desktop / Cursor، تستخدم هذه العملية بالضبط: كلها مسجلة كتطبيقات OAuth من نوع عام (PKCE)، وتطلب scope متعلقًا بـcredentials، وبعد تفويض المستخدم يمكن لخادم MCP استدعاء api.acedata.cloud نيابةً عن المستخدم — دون حاجة إلى أن يلصق المستخدم API Key يدويًا. طريقة اتصالك مطابقة تمامًا لطريقتهم.
الأخطاء الشائعة
تكون استجابة الخطأ موحدة بصيغة{ "error": "<code>", "error_description": "<وصف قابل للقراءة البشرية>" }:
ملخص القيود
تضمين تطبيق OAuth تابع لجهة خارجية في الصفحة الرئيسية لـ Studio
يمكن في «الإعدادات → الصفحة الرئيسية → مكونات الموقع» في Studio تفعيل OAuth، وتكوينclient_id لتطبيق الجهة الخارجية وعنوان رد الاتصال المسجل.
يجب أن يستخدم الموقع ورد الاتصال HTTPS، وأن يكون لهما نفس المصدر (البروتوكول واسم النطاق والمنفذ)، وأن يستخدما مصدرًا مختلفًا عن Studio.
لا يجوز ملء client_secret في التكوين؛ لا يمكن تخزين مفتاح التطبيق إلا في الواجهة الخلفية للجهة الخارجية.
الأذونات التي يطلبها المكون هي profile:read credentials:read. يحتاج كل زائر إلى الموافقة بشكل منفصل؛ فتكوين مالك الموقع للمكون لا يمثل تفويض الزائر.
تُنشئ صفحة الجهة الخارجية state عشوائيًا وPKCE verifier، وترسل S256 challenge إلى Studio. يستضيف Studio صفحة التفويض الرسمية في منطقة المكون،
وبعد موافقة المستخدم، تتلقى الجهة الخارجية رمز تفويض لمرة واحدة، وتستدعي نقطة نهاية token لاستبداله بـ OAuth access token، ثم تصل إلى
GET https://platform.acedata.cloud/api/v1/credentials/?user_id=<用户ID> لقراءة API Key الموجود.
يأتي معرّف المستخدم من id المُرجع في الخطوة السابقة بواسطة GET https://auth.acedata.cloud/api/v1/users/me؛ ولا تقبل واجهة قائمة بيانات الاعتماد user_id=me.
لا يرسل Studio رمز تسجيل الدخول الخاص به إلى الجهة الخارجية ولا يقرأ ويحقن Key الخاص بالمستخدم مباشرةً.
يجب أن تستخدم التطبيقات العامة S256 PKCE. عند استبدال token، يجب تمرير redirect_uri المتطابق تمامًا مع طلب التفويض.
لا يمكن استبدال رمز التفويض إلا مرة واحدة. قبل التفويض، سيتم التحقق مما إذا كان عنوان رد الاتصال مسجلاً.
تحتاج صفحة الجهة الخارجية إلى تنفيذ بروتوكول الرسائل؛ ولا يمكن لأي صفحة ويب جاهزة الاتصال تلقائيًا بمجرد ملء URL.
للحصول على مثال كامل، راجع دليل تكامل مكون Studio OAuth.
إن تفويض قراءة API Key يعادل السماح للجهة الخارجية بحفظ هذا الـ Key واستخدامه. لن يؤدي إلغاء تفويض OAuth إلى إبطال الـ Key الذي نسخته الجهة الخارجية بالفعل؛
ويحتاج المستخدم إلى إلغاء الـ Key أو تدويره بشكل منفصل.
