OAuth: وصف للبروتوكول بلغة بسيطة ومفهومة. OAuth VKontakte: يستخدم لتحقيق مكاسب شخصية

22.05.2019

هناك طرق عديدة لتوزيع البريد العشوائي الضار على فكونتاكتي. لكن الآفات لا تنام؛ وتتبادر إلى أذهانهم المزيد والمزيد من الأفكار المثيرة للاهتمام. واتضح أنه مفيد جدًا. لقد تعلم المحتالون كيفية استخدامه لتجاوز صفحة التحذير الخاصة بالمواقع الضارة.

وبدأ كل شيء عندما ظهرت الرسالة التالية في أحد الأيام على حائطي:


بدافع الفضول، اتبعت الرابط وانتهى بي الأمر في موقع تصيد آخر. لكن الرابط نفسه بدا غريبًا بالنسبة لي، فقد بدا وكأنه (نصف الأحرف في ASCII):
vkontakte.ru/away.php ? ل=http%3A%2F%2FApi.vKontakte.Ru%2F%2Fo%2561u%2574%…

هنا يبدا المرح...
دعونا نلقي نظرة على الرابط الثاني في أجزاء:

ماذا تعني كل معلمة:

  • Client_id - معرف التطبيق الذي يتطلب الترخيص؛
  • redirect_uri - العنوان الذي سيتم إرسال رمز الوصول إليه (عبر إعادة التوجيه)؛
  • العرض - نوع نافذة التفويض (صفحة، نافذة منبثقة، لمس، وواب).
في الواقع، يحتوي redirect_uri على عنوان موقع التصيد الاحتيالي. نظرًا لوجود خطأ في معلمة العرض (كانت تحتوي على بيانات غير صحيحة "؟390852")، لم يتم عرض نافذة التفويض، ولكن تمت إعادة توجيهها على الفور إلى موقع تصيد احتيالي باستخدام المعلمات التالية: error=invalid_request&error_description=Invalid+display+passed

هذا هو بيت القصيد من تجاوز القائمة السوداء لمواقع فكونتاكتي الضارة. يظهر فقط تنبيه حول الانتقال إلى api.vk.com. ونتيجة للانتقال، ننتقل مباشرة إلى موقع التصيد الاحتيالي المدرج في القائمة السوداء. عندما تتبع الرابط vkontakte.ru/away.php?to=vgostivk.dyndns**:

كما اتضح فيما بعد، فإن التطبيق الذي يفترض أنه يتطلب إذنًا كان معلقًا على المستخدم المخترق:

وقد تم تصميم موقع التصيد الاحتيالي نفسه بشكل مثير للاهتمام. التصميم، كالعادة، كان على طراز الاتصال وطلب تسجيل الدخول. لقد قمت بتسجيل الدخول باستخدام بريد إلكتروني وكلمة مرور عشوائيين، وابتلعت الملف المزيف على ما يرام. ما حدث بعد ذلك كان أكثر إثارة للاهتمام؛ فقد ظهرت أخبار من "بافيل دوروف" على الصفحة الرئيسية:

بعد النقر على زر "إنشاء عداد شخصي"، ظهر شريط تقدم رائع. ثم طُلب منك الإشارة إلى رقمك وإرسال رسالة نصية قصيرة:

من الناحية النظرية، بعد "التنشيط" الناجح، كان من المفترض إعادة التوجيه إلى صفحة activ.php، لكنني لم أتمكن من الوصول إلى هناك. مقتطفات من البرامج النصية JS لموقع التصيد:

...
إذا (req.status == 200) (
// إذا كانت الحالة 200 (موافق) - قم بالرد على المستخدم
إذا (req.responseText == "موافق") (
//statusElem.innerHTML = "كل شيء على ما يرام!";
get_activation();
}
إذا (req.responseText == "لا" ) (statusElem.innerHTML = "رمز التفعيل غير صالح";}
//statusElem.innerHTML = "استجابة الخادم:"+req.responseText;
...
الدالة get_activation() (
وثيقة .location="activ.php" ;
}

* تم تمييز كود المصدر هذا باستخدام Source Code Highlighter.


الحد الأدنى: يستخدم المحتالون OAuth 2.0 لتجاوز التحذيرات، والحصول على كلمة المرور والبريد الإلكتروني للمستخدم، وحتى محاولة خداعه لإرسال رسائل نصية قصيرة (على الأرجح باستخدام نظام الاشتراك).
  1. فتح المتصفح المدمج مع صفحة تسجيل الدخول
  2. يُطلب من المستخدم تأكيد منح الحقوق.
  3. إذا وافق المستخدم، تتم إعادة توجيه المتصفح إلى صفحة كعب روتين في الجزء (بعد #) الذي تتم إضافة عنوان URL الخاص به رمز وصول
  4. يعترض التطبيق عملية إعادة التوجيه ويستقبلها رمز وصولمن عنوان الصفحة
يتطلب هذا الخيار رفع نافذة المتصفح في التطبيق، لكنه لا يتطلب جزء الخادم واستدعاء خادم إلى خادم إضافي للتبادل قانون التفويضعلى رمز وصول.
مثال
افتح المتصفح بصفحة تسجيل الدخول:
> الحصول على /oauth/authorize?response_type=token&client_id=464119 HTTP/1.1 > المضيف: Connect.mail.ru

بعد أن يمنح المستخدم الأذونات، تتم إعادة التوجيه إلى صفحة كعب الروتين القياسية، وهذا هو Mail.Ru Connect.mail.ru/oauth/success.html:
< HTTP/1.1 302 Found < Location: http://connect.mail.ru/oauth/success.html#access_token=FJQbwq9&token_type=bearer& expires_in=86400&refresh_token=yaeFa0gu

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

التفويض عن طريق تسجيل الدخول وكلمة المرور

التفويض عن طريق تسجيل الدخول وكلمة المرور هو طلب POST بسيط، ونتيجة لذلك يتم إرجاعه رمز وصول. هذا المخطط ليس جديدًا، ولكنه مدرج في معيار العمومية ويوصى باستخدامه فقط عندما لا تتوفر خيارات ترخيص أخرى.
مثال
> POST /oauth/token HTTP/1.1 > المضيف: Connect.mail.ru > نوع المحتوى: application/x-www-form-urlencoded > > Grant_type=password&client_id=31337&client_secret=deadbeef&username=api@corp.mail.ru&password= com.qwerty< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"SlAV32hkKG", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"8xLOxBtZp8", < }
الوصف في المواصفات

استعادة الترخيص السابق

عادة، رمز وصوللديه مدة صلاحية محدودة. يمكن أن يكون هذا مفيدًا، على سبيل المثال، إذا تم إرساله عبر قنوات مفتوحة. لتجنب إجبار المستخدم على تسجيل الدخول بعد انتهاء الصلاحية رمز وصول"، وفي جميع الخيارات المذكورة أعلاه، بالإضافة إلى رمز وصول"ربما أعود مرة أخرى رمز التحديث. يمكنك استخدامه للحصول على رمز وصولباستخدام طلب HTTP، على غرار التفويض باستخدام تسجيل الدخول وكلمة المرور.
مثال
> POST /oauth/token HTTP/1.1 > المضيف: Connect.mail.ru > نوع المحتوى: application/x-www-form-urlencoded > > Grant_type=refresh_token&client_id=31337&client_secret=deadbeef&refresh_token=8xLOxBtZp8< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"Uu8oor1i", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"ohWo1ohr", < }
  1. فتح المتصفح المدمج مع صفحة تسجيل الدخول
  2. يُطلب من المستخدم تأكيد منح الحقوق.
  3. إذا وافق المستخدم، تتم إعادة توجيه المتصفح إلى صفحة كعب روتين في الجزء (بعد #) الذي تتم إضافة عنوان URL الخاص به رمز وصول
  4. يعترض التطبيق عملية إعادة التوجيه ويستقبلها رمز وصولمن عنوان الصفحة
يتطلب هذا الخيار رفع نافذة المتصفح في التطبيق، لكنه لا يتطلب جزء الخادم واستدعاء خادم إلى خادم إضافي للتبادل قانون التفويضعلى رمز وصول.
مثال
افتح المتصفح بصفحة تسجيل الدخول:
> الحصول على /oauth/authorize?response_type=token&client_id=464119 HTTP/1.1 > المضيف: Connect.mail.ru

بعد أن يمنح المستخدم الأذونات، تتم إعادة التوجيه إلى صفحة كعب الروتين القياسية، وهذا هو Mail.Ru Connect.mail.ru/oauth/success.html:
< HTTP/1.1 302 Found < Location: http://connect.mail.ru/oauth/success.html#access_token=FJQbwq9&token_type=bearer& expires_in=86400&refresh_token=yaeFa0gu

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

التفويض عن طريق تسجيل الدخول وكلمة المرور

التفويض عن طريق تسجيل الدخول وكلمة المرور هو طلب POST بسيط، ونتيجة لذلك يتم إرجاعه رمز وصول. هذا المخطط ليس جديدًا، ولكنه مدرج في معيار العمومية ويوصى باستخدامه فقط عندما لا تتوفر خيارات ترخيص أخرى.
مثال
> POST /oauth/token HTTP/1.1 > المضيف: Connect.mail.ru > نوع المحتوى: application/x-www-form-urlencoded > > Grant_type=password&client_id=31337&client_secret=deadbeef&username=api@corp.mail.ru&password= com.qwerty< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"SlAV32hkKG", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"8xLOxBtZp8", < }
الوصف في المواصفات

استعادة الترخيص السابق

عادة، رمز وصوللديه مدة صلاحية محدودة. يمكن أن يكون هذا مفيدًا، على سبيل المثال، إذا تم إرساله عبر قنوات مفتوحة. لتجنب إجبار المستخدم على تسجيل الدخول بعد انتهاء الصلاحية رمز وصول"، وفي جميع الخيارات المذكورة أعلاه، بالإضافة إلى رمز وصول"ربما أعود مرة أخرى رمز التحديث. يمكنك استخدامه للحصول على رمز وصولباستخدام طلب HTTP، على غرار التفويض باستخدام تسجيل الدخول وكلمة المرور.
مثال
> POST /oauth/token HTTP/1.1 > المضيف: Connect.mail.ru > نوع المحتوى: application/x-www-form-urlencoded > > Grant_type=refresh_token&client_id=31337&client_secret=deadbeef&refresh_token=8xLOxBtZp8< HTTP/1.1 200 OK < Content-Type: application/json < < { < "access_token":"Uu8oor1i", < "token_type":"bearer", < "expires_in":86400, < "refresh_token":"ohWo1ohr", < }

في عام 2010، بدأ العمل على إصدار جديد تمامًا من بروتوكول OAuth 2.0، والذي لن يكون متوافقًا مع الإصدارات السابقة من OAuth 1.0. في أكتوبر 2012، تم نشر إطار عمل OAuth 2.0 في RFC 6749، واستخدام حامل الرمز المميز في RFC 6750، وكلاهما يتتبع طلبات التعليق. لا يزال يجري تطوير طلبات RFC إضافية.

كانت هناك عدة متطلبات أساسية لإنشاء OAuth 2.0. أولًا، OAuth ليس سهل الاستخدام على جانب العميل. أحد أهداف تطوير OAuth الجديد هو تبسيط عملية تطوير تطبيقات العميل. ثانيًا، على الرغم من تنفيذ ثلاث طرق (تسمى التدفقات) مذكورة في المعيار للحصول على رمز مميز (معرف فريد) للترخيص: بالنسبة لتطبيقات الويب وعملاء سطح المكتب وعملاء الأجهزة المحمولة، في الواقع يتم دمج الطرق الثلاث في طريقة واحدة. وثالثا، تبين أن البروتوكول ضعيف التوسع. ومن المخطط إضافة:

  • 6 تيارات جديدة.
تدفق وكيل المستخدم - للعملاء الذين يعملون داخل وكيل مستخدم (عادةً متصفح ويب). تدفق خادم الويب - للعملاء الذين يشكلون جزءًا من تطبيق خادم الويب، ويمكن الوصول إليهم عبر طلبات HTTP. تدفق الجهاز - مناسب للعملاء الذين يعملون على أجهزة محظورة، ولكن حيث يكون للمستخدم النهائي وصول منفصل إلى متصفح على كمبيوتر أو جهاز آخر. تدفق اسم المستخدم وكلمة المرور - يُستخدم في الحالات التي يثق فيها المستخدم في العميل للتعامل مع بيانات الاعتماد الخاصة به، لكنه لا يزال لا يرغب في السماح للعميل بتخزين اسم المستخدم وكلمة المرور. يكون هذا التدفق مناسبًا فقط عندما تكون هناك درجة عالية من الثقة بين المستخدم والعميل. تدفق بيانات اعتماد العميل - يستخدم العميل بيانات اعتماده للحصول على رمز مميز. تدفق التأكيد - يرسل العميل تأكيدًا، مثل تأكيد SAML، إلى خادم التفويض مقابل رمز مميز. يمكن تنفيذ التطبيقات التي تعمل على كمبيوتر مكتبي أو جهاز محمول باستخدام التدفقات المذكورة أعلاه.
  • رمز حامل.
تشبه طريقة التفويض طريقة التفويض الحالية باستخدام ملفات تعريف الارتباط. في هذه الحالة، يتم استخدام الرمز المميز مباشرةً باعتباره سرًا (حقيقة وجود الرمز المميز تسمح للعميل) ويتم إرساله عبر HTTPS. يتيح لك هذا الوصول إلى واجهة برمجة التطبيقات (API) من خلال نصوص برمجية بسيطة (على سبيل المثال، استخدام cURL).
  • توقيع مبسط.
تم تبسيط التوقيع إلى حد كبير للتخلص من الحاجة إلى التحليل الخاص والترميز وفرز المعلمات.
  • الرموز قصيرة الأجل مع ترخيص طويل الأجل.
بدلاً من إصدار رمز مميز طويل الأمد (والذي يمكن اختراقه بمرور الوقت)، يوفر الخادم وصولاً قصير المدى وقدرة طويلة المدى على تحديث الرمز المميز دون تدخل المستخدم.
  • الفصل بين الأدوار.
قد تكون الخوادم المختلفة مسؤولة عن الترخيص وتوفير الوصول إلى واجهة برمجة التطبيقات.

ومن الجدير بالذكر أنه على الرغم من أن معيار OAuth 2.0 لم تتم الموافقة عليه بعد، إلا أنه مستخدم بالفعل من قبل بعض الخدمات. على سبيل المثال، تدعم واجهة Facebook Graph API بروتوكول OAuth 2.0 فقط.

الفرق بين OAuth وOpenID

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

الطابع الزمني وNonce

لمنع التهديد بطلبات إعادة التشغيل، يستخدم OAuth حرفًا nonce وطابعًا زمنيًا. المصطلح "nonce" يعني أن هذه المرة تستخدم مرة واحدة وهي عبارة عن مجموعة عشوائية فريدة من الحروف والأرقام تهدف إلى تحديد كل طلب موقع بشكل فريد. ومن خلال وجود معرف فريد لكل طلب، سيتمكن مزود الخدمة من منع طلبات إعادة الاستخدام. وهذا يعني أن العميل يقوم بإنشاء سلسلة فريدة لكل طلب يرسله إلى الخادم، ويتتبع الخادم جميع الأحرف غير المستخدمة لمنع استخدامها مرة أخرى.

يمكن أن يكون استخدام الحروف غير المكتملة مكلفًا للغاية بالنسبة للخادم، حيث يتطلب تخزينًا دائمًا لجميع الحروف غير المستلمة. لتسهيل التنفيذ، يضيف OAuth طابعًا زمنيًا لكل طلب، مما يسمح للخادم بتخزين الرقم nonce لفترة محدودة فقط. عندما يصل طلب بطابع زمني أقدم من الوقت المخزن، يتم رفضه لأن الخادم لم يعد لديه nonce من ذلك الوقت.

أوراق الاعتماد والرموز

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

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

يتم استخدام الرمز المميز بدلاً من الاسم وكلمة المرور لمالك المورد. لا يشارك مالك المورد بيانات الاعتماد الخاصة به مع العميل، بل يأذن للخادم بإصدار رمز مميز للعميل - فئة خاصة من بيانات الاعتماد التي تمثل منح الوصول. يستخدم العميل الرمز المميز للوصول إلى المورد المحمي دون معرفة كلمة مرور مالك المورد.

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

تستخدم عملية ترخيص OAuth أيضًا مجموعة من بيانات الاعتماد المؤقتة التي يتم استخدامها لتحديد طلب الترخيص. لاستيعاب أنواع مختلفة من العملاء (الويب، سطح المكتب، الهاتف المحمول، وما إلى ذلك)، توفر بيانات الاعتماد المؤقتة مرونة وأمانًا إضافيين.

كيف يعمل OAuth

كيف يعمل بروتوكول OAuth

دعونا نشرح تشغيل بروتوكول OAuth باستخدام مثال. لنفترض أن المستخدم (مالك المورد) يريد طباعة صوره (الموارد) التي تم تحميلها على موقع "photos.example.net" (الخادم) باستخدام خدمة الطباعة "printer.example.net" (العميل).

  1. يرسل العميل، باستخدام بروتوكول HTTPS، طلبًا إلى الخادم الذي يحتوي على معرف العميل، والطابع الزمني، وعنوان رد الاتصال الذي يجب إرجاع الرمز المميز إليه، ونوع التوقيع الرقمي المستخدم، والتوقيع نفسه.
  2. يقر الخادم بالطلب ويستجيب للعميل باستخدام رمز الوصول وجزء من السر المشترك.
  3. ينقل العميل الرمز المميز إلى مالك المورد (المستخدم) ويعيد توجيهه إلى الخادم للحصول على الترخيص.
  4. بعد أن تلقى الخادم رمزًا مميزًا من المستخدم، يطلب منه تسجيل الدخول وكلمة المرور الخاصة به، وإذا نجحت المصادقة، يطلب من المستخدم تأكيد وصول العميل إلى الموارد (الترخيص)، وبعد ذلك تتم إعادة توجيه المستخدم بواسطة الخادم إلى عميل.
  5. يقوم العميل بتمرير رمز مميز إلى الخادم عبر TLS ويطلب الوصول إلى الموارد.
  6. يقر الخادم بالطلب ويستجيب للعميل برمز وصول جديد.
  7. باستخدام الرمز الجديد، يتصل العميل بالخادم للحصول على الموارد.
  8. يقر الخادم بالطلب ويوفر الموارد.

يصف هذا المثال تدفقًا يتضمن رمز التفويض (تدفق رمز التفويض). بالإضافة إلى ذلك، يصف معيار OAuth 2.0 التدفقات التالية:

  • تدفق المنحة الضمنية
يتمثل الاختلاف عن تدفق رمز التحقق في أنه لم تتم مصادقة العميل بواسطة الخادم ويتم إصدار رمز الوصول بواسطة الخادم بعد طلب التفويض.
  • تحديث تدفق رمز الوصول منتهي الصلاحية
الاختلافات بين هذا التدفق والمثال الموضح هي كما يلي: في الخطوة 2، يقوم الخادم، بالإضافة إلى رمز الوصول، الذي له عمر محدود، بإصدار رمز تحديث؛ في الخطوة 8، يتحقق الخادم مما إذا كان رمز الوصول صالحًا (بمعنى انتهاء الصلاحية)، وبناءً على ذلك، فإنه إما يمنح الوصول إلى الموارد أو يتطلب تحديث رمز الوصول (الذي يتم توفيره عند تقديم رمز التحديث).
  • تدفق بيانات اعتماد كلمة مرور مالك المورد
في هذا التدفق، يزود مالك المورد العميل بتسجيل الدخول وكلمة المرور، ويمررهما إلى الخادم ويتلقى رمزًا مميزًا للوصول إلى الموارد. على الرغم من أن طريقة التشغيل هذه تتعارض إلى حد ما مع مفهوم إنشاء البروتوكول، إلا أنها موصوفة في المواصفات.
  • تدفق بيانات اعتماد العميل
في وضع تشغيل البروتوكول هذا، يوفر الخادم رمز وصول بعد أن يرسل العميل المستخدم وكلمة المرور الخاصة به، والتي تم تعيينها مسبقًا بواسطة خادم التفويض (لا تحدد المواصفات كيف بالضبط). في الواقع، يخضع العميل على الفور للترخيص والمصادقة.

يدعم OAuth طريقتين لمصادقة الرسائل من العميل: HMAC -SHA1 وRSA -SHA1 . من الممكن إرسال رسائل بدون توقيع، ثم تتم الإشارة إلى "نص عادي" في حقل نوع التوقيع. ولكن في هذه الحالة، وفقًا للمواصفات، يجب إنشاء الاتصال بين العميل والخادم عبر SSL أو TLS.

البوابات باستخدام OAuth

مناقشة

في يوليو 2012، أعلن عيران هامر، المحرر الحالي لمعيار OAuth 2.0، استقالته بعد ثلاث سنوات من العمل على المعيار الجديد، وطلب إزالة اسمه من المواصفات. لقد تحدث عن آرائه على موقعه على الإنترنت. وقدم في وقت لاحق عرضا. .

ملحوظات

أنظر أيضا

روابط


مؤسسة ويكيميديا. 2010.

ونتيجة لذلك، يمكن لتطبيق العميل الذي يستخدم AdWords API الوصول إلى حساب AdWords بدون عنوان البريد الإلكتروني وكلمة المرور للمستخدم.

إنشاء بيانات اعتماد OAuth2

لإنشاء بيانات اعتماد OAuth2، اتبع الخطوات التالية.

تحديد نوع التطبيق

أولا، عليك أن تحدد نوع التطبيق، الذي تريد إنشاءه. هناك نوعان من التطبيقات في AdWords API:

  • تطبيق قابل للتثبيت(مُستَحسَن)؛
  • تطبيق الويب.

استخدم الجدول أدناه لتحديد نوع التطبيق الذي تحتاجه.

ماذا تختار الموقف
تطبيق قابل للتثبيت(مُستَحسَن)
  • يمكنك إدارة جميع حساباتك في AdWords باستخدام حساب مدير واحد عالي المستوى.
  • هل بدأت للتو أم تريد البدء بسرعة؟
  • سيعمل تطبيقك مع مجموعة واحدة من حسابات AdWords التي تضم عدة مستخدمين.
تطبيق ويب
  • تريد استخدام المصادقة لمنح مستخدمين مختلفين حقوق وصول مختلفة إلى بيانات حسابك في AdWords.
  • تحتاج إلى إنشاء مجموعات متعددة من بيانات الاعتماد، على سبيل المثال لإدارة حسابات الطرف الثالث.
  • يتطلب التطبيق الخاص بك عناوين URL لرد الاتصال غير المدعومة في التطبيقات المثبتة.
انتباه!حتى إذا كنت تقوم بتطوير تطبيق ويب، فلا يزال بإمكانك اختيار التطبيق الذي تريد تثبيته. والفرق الرئيسي هو ما إذا كان يجب إجراء رد الاتصال بعد إصدار الرمز المميز. على سبيل المثال، إذا كنت تستخدم حساب مدير عالي المستوى لإدارة جميع حساباتك في AdWords، فيجب تسجيل التطبيق الذي تثبته، حتى لو كان تطبيق العميل يمكن الوصول إليه عبر الإنترنت. ملحوظة.تتم مناقشتها أدناه. إذا كنت لا تحتاج إلى وظيفة حساب الخدمة، فنوصي بشدة باستخدام عملية الترخيص للتثبيت أو تطبيق الويب.

إنشاء معرف العميل والرمز السري

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

تطبيق قابل للتثبيت

  1. يفتح
  2. إنشاء مشروع يخلق.
  3. إنشاء بيانات الاعتماد، وثم - معرف عميل OAuth.
  4. يحفظ
  5. في الفصل نوع التطبيقيختار أنواع أخرىوتقديم المعلومات المطلوبة.
  6. انقر يخلق.
  7. معرفو المفتاح السري
تطبيق ويب
  1. يفتح
  2. من القائمة المنسدلة للمشاريع، حدد إنشاء مشروع، ثم حدد اسم المشروع وقم بتغيير المعرف الخاص به إذا لزم الأمر، ثم انقر فوق الزر يخلق.
  3. في صفحة بيانات الاعتماد، حدد إنشاء بيانات الاعتماد، وثم - معرف عميل OAuth.
  4. قد يُطلب منك تقديم اسم المنتج. في هذه الحالة، انقر فوق تخصيص نافذة طلب الوصول، أدخل المعلومات المطلوبة وانقر يحفظللعودة إلى شاشة بيانات الاعتماد.
  5. في الفصل نوع التطبيقيختار تطبيق ويب. اتبع الإرشادات لتحديد مصادر JavaScript و/أو إعادة توجيه URIs.
  6. انقر يخلق.
  7. في الصفحة التي تظهر، انسخ معرفو المفتاح السريالعميل - ستحتاج إليها عند إعداد مكتبة العميل.

اتبع الإرشادات أدناه لتكوين استخدام بيانات اعتماد OAuth2 مع مكتبة العميل الخاصة بلغتك.

ملحوظة.إذا اخترت عدم استخدام إحدى مكتبات عملائنا، فستحتاج إلى تنفيذ العمليات بنفسك.

ملعب OAuth2

هناك خيار بديل لإنشاء بيانات اعتماد OAuth2 وهو الاستخدام ملعب OAuth2. يتيح لك هذا النظام، بالاشتراك مع وحدة تحكم Google API، إنشاء رموز OAuth2 المميزة بنفسك.

تم تصميم نظام OAuth2 Playground لأولئك المستخدمين الذين يحتاجون إلى الوصول إلى حساباتهم فقط واحدحساب المدير أو مستخدم AdWords. إذا كنت بحاجة إلى المطالبة ببيانات الاعتماد لعدة مستخدمين، فمن الأفضل استخدام مكتبات العملاء كما هو موضح أعلاه.

إعدادات

تحذير.ليستخدم ملعب OAuth2، تحتاج إلى إنشاء معرف العميلل . هذا الوحيدنوع من التطبيقات التي تعمل مع OAuth2 Playground. اقرأ المزيد في القسم أعلاه.

كيفية الحصول على معرف العميل والمفتاح السري

  1. يفتح
  2. من القائمة المنسدلة، حدد مشروعًا موجودًا أو قم بإنشاء مشروع جديد.
  3. في صفحة بيانات الاعتماد، حدد إنشاء بيانات الاعتماد، وثم - معرف عميل OAuth.
  4. في الفصل نوع التطبيقيختار تطبيق ويب.
  5. في القسم أضف السطر التالي: https://site/oauthplayground
  6. انقر يخلق.
  7. اكتبه معرفو المفتاح السريالعملاء المشار إليهم في الصفحة التي تظهر. سوف تحتاج إليها في الخطوة التالية.

كيفية إنشاء الرموز

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

كيفية إزالة OAuth2 Playground من معرف العميل

منذ أن لديك بالفعل رمز التحديث، لم تعد بحاجة إلى استخدام OAuth2 Playground باعتباره URI لإعادة التوجيه الذي تم حله. لإزالة هذا النظام من القائمة، اتبع الخطوات التالية:

  1. اذهب إلى .
  2. حدد مشروعك من القائمة المنسدلة.
  3. في صفحة بيانات الاعتماد، حدد اسم معرف العميل.
  4. قم بإزالة https://site/oauthplayground من الحقل يُسمح بإعادة توجيه عناوين URI. يرجى ملاحظة أنه يجب عليك المغادرة على الأقل واحدإعادة توجيه URI.
  5. انقر يحفظ.

لذلك لديك بيانات اعتماد OAuth الخاصة بك. يمكنك الآن الاستعلام عن AdWords API واستخدامها مقابل مكتبة العميل المطلوبة.

حسابات خدمة OAuth2

يصف هذا القسم كيفية الوصول إلى AdWords API باستخدام حسابات الخدمة.

حساب الخدمة هو حساب ينتمي إلى التطبيق وليس إلى المستخدم النهائي الفردي. توفر حسابات الخدمة التفاعل بين تطبيق الويب وخدمة Google. يستدعي تطبيقك واجهة برمجة التطبيقات (API) نيابة عن حساب الخدمة دون إشراك المستخدمين بشكل مباشر.

تسمح واجهة برمجة تطبيقات AdWords بالوصول إلى حساب الخدمة عبر نطاقات G Suite.

ينفذ حساب الخدمة عملية OAuth2، والتي بدلاً من ترخيص المستخدم تستخدم ملف مفتاح لا يمكن الوصول إليه إلا من خلال التطبيق الخاص بك.

يوفر استخدام حسابات الخدمة ميزتين مهمتين:

  • يتم ترخيص وصول التطبيق إلى Google API أثناء مرحلة الإعداد. يؤدي هذا إلى تجنب متاعب طلب تدخل المستخدم أو تخزين الرموز المميزة مؤقتًا في تدفقات OAuth2 الأخرى.
  • يتم انتحال هوية مستخدمين آخرين في التطبيق، إذا لزم الأمر، كجزء من عملية الموافقة على OAuth2.
ملحوظة. إذا كنت لا تستخدم ميزات خاصة بالمجال، مثل انتحال الهوية، بدلاً من حسابات الخدمة، يوصى بشدة باستخدام عملية لـ . كجزء من عمليات تثبيت OAuth2 وتطبيق الويب، تكون مشاركة المستخدم مطلوبة مرة واحدة فقط - في وقت منح الوصول إلى الحساب.

بديل لحسابات الخدمة

تُستخدم حسابات الخدمة على نطاق واسع لتوفير الوصول البرمجي إلى واجهات برمجة التطبيقات باستخدام بروتوكول OAuth2 دون تدخل المستخدم.

ومع ذلك، فإن إعداد مثل هذه الحسابات للعمل مع AdWords API ليس بالأمر السهل. بديل أبسطمع رمز التحديث المستمر. يسمح هذا الأسلوب للتطبيق بطلب رموز وصول جديدة في أي وقت.

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

متطلبات

  • نطاق G Suite الذي تملكه، مثل mydomain.com أو mybusiness.com.
  • الرمز المميز لمطور AdWords API ويفضل أن يكون حسابًا تجريبيًا.
  • للغة المستخدمة.

إعداد الوصول لحساب العميل

أولاً، تحتاج إلى إنشاء مفتاح حساب الخدمة في وحدة تحكم Google API.

  1. قم بتسجيل الدخول إلى حسابك على G Suite، وافتح .
  2. من القائمة المنسدلة للمشاريع، حدد إنشاء مشروع، ثم أدخل المعلومات المطلوبة وانقر فوق الزر يخلق. سيظهر المشروع الجديد في القائمة النشطة.
  3. من القائمة الموجودة في الزاوية اليسرى العليا، حدد IAM والإدارة، وثم - حسابات الخدمةفي القائمة على اليسار.
  4. انقر إنشاء حساب الخدمةفي الجزء العلوي من الصفحة.
  5. أدخل اسم حساب الخدمة.
  6. تفقد الصندوق قم بإنشاء مفتاح خاص جديدوحدد نوع مفتاح JSON.
  7. تفقد الصندوق تمكين تفويض الوصول إلى البيانات في نطاق G Suite الخاص بكوقم بتوفير اسم المنتج لنافذة طلب الوصول.
  8. انقر يخلق. سيبدأ تنزيل ملف مفتاح JSON. احفظ الملف في مكان آمن حيث لا يمكن لأحد سواك الوصول إليه.
  9. على الصفحة حسابات الخدمةسيظهر حساب خدمة جديد.
ملحوظة. لأنه يمكن التحكم في انتحال شخصية المستخدم فقطعلى مستوى النطاق، لاستخدام حسابات الخدمة وعملية الموافقة مع خدمات Google OAuth2، ستحتاج إلى تسجيل نطاقك الخاص في G Suite. يمكن لجميع مستخدمي المجال الذين يستخدمون حساب خدمة يتمتع بالأذونات المناسبة انتحال شخصية أي مستخدم مجال.

القضايا الأمنية

نظرًا لأن G Suite تتم إدارته على مستوى النطاق، يجب عليك حماية ملف المفتاح بشكل آمن والذي يسمح للحسابات المعتمدة بالوصول إلى خدمات Google. وهذا مهم بشكل خاص لأننا نزود حساب الخدمة بالقدرة على انتحال شخصية أي مستخدم للمجال.

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

كيفية توفير إمكانيات انتحال الشخصية

لمنح إمكانات الانتحال لحساب خدمة، اتبع الخطوات التالية:

يمكنك الآن الوصول إلى حسابك في AdWords باستخدام حساب الخدمة الخاص بك كجزء من عملية الموافقة على OAuth2.

إعداد مكتبة العميل

حدد لغة لعرض التعليمات الخاصة بإعداد مكتبة العميل.

ملحوظة.إذا اخترت عدم استخدام إحدى مكتبات عملائنا، فستحتاج إلى تنفيذ العملية بنفسك.

تحسين طلبات OAuth2

إذا كان تطبيقك لا يستخدم توزيع بيانات الاعتماد، فقد يؤدي ذلك إلى زيادة كبيرة في عدد الطلبات المرسلة إلى Google. ونتيجة لذلك، قد تفرض خوادمنا قيودًا على مثل هذا التطبيق، مما سيؤدي إلى تقليل سرعة عمله.

يصف هذا القسم كيفية تحسين إدارة بيانات اعتماد OAuth2 بحيث يتفاعل تطبيقك بشكل أكثر فعالية مع AdWords API.

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

استراتيجيات توزيع الاعتماد

يؤدي توزيع بيانات الاعتماد عبر طلبات واجهة برمجة التطبيقات (API) إلى تحسين الأداء وتجنب الحمل الزائد والأخطاء الناتجة عن انتهاكات القيود.

تعتمد استراتيجية توزيع بيانات الاعتماد على تصميم التطبيق.

في التطبيقات ذات مؤشرات الترابط المتعددة، يجب عليك استخدام نفس بيانات الاعتماد لكل جلسة عمل لمؤشر الترابط.

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

في تطبيق متعدد العمليات/موزع ومتعدد الخيوط، تحتاج كل عملية إلى الجمع بين الاستراتيجيتين.

فيما يلي إستراتيجيات لمصادقة حساب AdWords واحد، مثل حساب المدير ذي المستوى الأعلى في التسلسل الهرمي.

ثم يصف كيفية تكييف هذه الاستراتيجيات مع .

تطبيقات متعددة الخيوط

في التطبيقات متعددة الخيوط، يجب أن تكون بيانات الاعتماد متاحة لخيوط مختلفة. يجب أن تتم تحديثات بيانات الاعتماد بشكل متزامن لتجنب حالات السباق.

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

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

على سبيل المثال، في مكتبة عميل Java، يمكنك إنشاء فئة بيانات اعتماد فردية واستخدامها لجميع الجلسات.

العمليات المتعددة والتطبيقات الموزعة

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

على سبيل المثال، قد تقوم مهمة أو خدمة واحدة بتحديث بيانات الاعتماد بشكل دوري ودفعها إلى مخزن البيانات حيث سيتم استخدامها بواسطة خوادم مختلفة.

يوضح الرسم التخطيطي التحديث الدوري لبيانات الاعتماد وتسجيل خصائصها في مخزن البيانات. تتلقى جميع الخوادم بعد ذلك بيانات الاعتماد قبل تقديم طلب إلى واجهة برمجة التطبيقات.

مهمة التحديث

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

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

ملحوظة.إذا انتهت صلاحية رمز الوصول الخاص ببيانات الاعتماد أثناء معالجة طلب واجهة برمجة التطبيقات (API)، فسيستمر تنفيذ الطلب. على سبيل المثال، إذا قمت بإنشاء استعلام طويل الأمد وكان لديك أقل من دقيقة متبقية للوصول إليه، فسيتم إرجاع النتائج.

مخزن البيانات

يتم استخدام تخزين البيانات لتوفير بيانات الاعتماد للعمليات والخوادم المختلفة.

للقيام بذلك، يمكنك استخدام مستودع بيانات موجود أو إنشاء مستودع متخصص ستتلقى الخوادم من خلاله بيانات الاعتماد. تتضمن الحلول الممكنة خوادم التخزين المؤقت (مثل Memcached أو Infinispan) ومخازن بيانات NoSQL (مثل MongoDB).

الغرض الرئيسي من مستودع البيانات هو توفير واجهة موثوقة لجميع الخوادم التي تصل إلى واجهة برمجة التطبيقات (API). يجب تحسين تشغيله لقراءة البيانات بسرعة: ستقرأ الخوادم والعمليات بيانات الاعتماد أكثر من تحديثها.

تذكر أن تحافظ على أمان بيانات الاعتماد الخاصة بك.

عند حفظ بيانات الاعتماد، يجب عليك حفظ خاصية expiry_time (الوقت الحالي + انتهاء الصلاحية) وrefresh_token مع خاصية Access_token. يتم حساب خاصية expiry_time (تاريخ انتهاء صلاحية الرمز المميز) باستخدام الصيغة التالية: وقت طلب تحديث Access_token + وقت انتهاء الصلاحية (تاريخ انتهاء صلاحية الرمز المميز).

تجمع الخادم

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

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

في العمليات ذات مؤشرات الترابط المتعددة، يجب عليك استخدام نفس الإستراتيجية لتوزيع بيانات الاعتماد بين سلاسل الرسائل.

مصادقة الحسابات المتعددة

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

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

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

أخيرًا، في التطبيقات متعددة الخيوط، تحتاج إلى توزيع كائن بيانات الاعتماد فقط بين سلاسل العمليات التي تعمل في الحساب المرتبط به.

كيف يعمل OAuth2

ملحوظة. لا يدعم AdWords API حتى الآن تسجيل الدخول المتزامن عبر طلب الوصول إلى البيانات (التصميم المختلط) أو تفويض السلطة على مستوى النطاق (2LO).

نِطَاق

يمكن أن يوفر رمز الوصول درجات متفاوتة من الوصول إلى البيانات. تحدد معلمة النطاق المتغير مجموعة الموارد والعمليات التي يوفر الرمز المميز الوصول إليها. عند طلب رمز وصول، يرسل تطبيقك قيمة واحدة أو أكثر إلى معلمة النطاق.

يوجد أدناه النطاق الحالي والقديم لـ AdWords API.

الوصول دون اتصال

عادةً ما يطلب تطبيق العميل الذي يستخدم AdWords API الوصول دون اتصال بالإنترنت. يمكن أن يحدث هذا إذا كان تطبيقك يحتاج إلى تشغيل مهام مجمعة أثناء قيام المستخدم بتصفح موقعك دون اتصال بالإنترنت.

تستخدم التطبيقات المثبتة الوصول دون اتصال بشكل افتراضي.

رأس طلب HTTP

يجب أن يتضمن رأس HTTP في كل طلب إلى خادم AdWords API النموذج التالي:

التفويض: حامل THE_ACCESS_TOKEN

POST ... HTTP/1.1 المضيف: ... التفويض: Bearer 1/fFAGRNJru1FTz70BzhT3Zg نوع المحتوى: text/xml;charset=UTF-8 طول المحتوى: ...

الوصول وتحديث الرموز

في معظم الحالات، يجب تخزين رمز التحديث في مكان آمن لأنه قد تكون هناك حاجة إليه لاحقًا. لمزيد من المعلومات حول طلب الوصول وتحديث الرموز المميزة، راجع الأدلة التالية:

عندما تنتهي صلاحية رمز الوصول

يحتوي رمز الوصول على تاريخ انتهاء صلاحية يعتمد على قيمةنتهي_في . يمكن تحديث رمز الوصول منتهي الصلاحية باستخدام رمز التحديث، لكن مكتبات عملائنا تقوم بذلك تلقائيًا.

ما لم تتم الإشارة إلى خلاف ذلك، فإن محتوى هذه الصفحة مرخص بموجب ترخيص Creative Commons Attribution 3.0، كما يتم ترخيص عينات التعليمات البرمجية بموجب ترخيص Apache 2.0. لمزيد من التفاصيل، انظر لنا. Java هي علامة تجارية مسجلة لشركة Oracle و/أو الشركات التابعة لها.

تم التحديث في 24 سبتمبر 2018