تحذير: تتناول هذه الصفحة واجهات برمجة التطبيقات القديمة من Google، أي Google Data APIs، وهي ذات صلة فقط بواجهات برمجة التطبيقات المدرَجة في دليل Google Data APIs، وقد تم استبدال العديد منها بواجهات برمجة تطبيقات أحدث. للحصول على معلومات حول واجهة برمجة تطبيقات جديدة معيّنة، يُرجى الاطّلاع على مستندات واجهة برمجة التطبيقات الجديدة. للحصول على معلومات عن الموافقة على الطلبات باستخدام واجهة برمجة تطبيقات أحدث، يُرجى الاطّلاع على مقالة المصادقة والتفويض في حسابات Google.
يوضّح هذا المستند كيفية استخدام مكتبات برامج Google Data API للاتصال بخدمة AuthSub Authentication for Web Applications من Google.
تسمح واجهة AuthSub لأحد تطبيقات الويب بالوصول إلى إحدى خدمات Google نيابةً عن مستخدم. للحفاظ على مستوى عالٍ من الأمان، تتيح واجهة AuthSub للتطبيق الحصول على رمز مميّز للمصادقة بدون الحاجة إلى التعامل مع معلومات تسجيل الدخول إلى حساب المستخدم.
توفّر مكتبات عملاء Google Data API طرقًا لمساعدتك في استخدام AuthSub في تطبيق الويب. على وجه التحديد، هناك طرق لإنشاء عنوان URL للطلب، والحصول على رمز مميّز للمصادقة صالح للاستخدام مرة واحدة، واستبدال الرمز المميز الصالح للاستخدام مرة واحدة برمز مميز للجلسة، وتوقيع الطلب.
ملاحظة: تتضمّن مكتبة برامج JavaScript إصدارًا خاصًا من AuthSub يُعرف باسم AuthSubJS. للحصول على معلومات حول كيفية استخدام AuthSubJS في تطبيقات JavaScript، يُرجى الاطّلاع على استخدام مصادقة AuthSub مع مكتبة عميل JavaScript.
الجمهور
هذا المستند مخصّص للمبرمجين الذين يريدون أن تتمكّن تطبيقاتهم المستندة إلى الويب من الوصول إلى خدمات Google بالنيابة عن المستخدمين، باستخدام مكتبات برامج Google Data APIs.
يفترض هذا المستند أنّك على دراية بواجهة AuthSub والعملية العامة لدمج AuthSub في تطبيق الويب. للحصول على وصف كامل لبروتوكول AuthSub، يُرجى الاطّلاع على مصادقة AuthSub لتطبيقات الويب.
استخدام AuthSub وGoogle Data APIs بدون مكتبات برامج العميل
إذا كنت تريد أن يتفاعل عميل تطبيق الويب مع خدمة بيانات من Google باستخدام AuthSub كنظام مصادقة، فكل ما تحتاج إلى معرفته موجود في مصادقة AuthSub لتطبيقات الويب. لست بحاجة إلى استخدام مكتبات برامج Google Data APIs إذا كنت لا تريد ذلك.
في ما يلي ملخّص لكيفية مصادقة تطبيقك للمستخدم باستخدام AuthSub:
ينشئ تطبيقك عنوان URL المناسب لـ AuthSub ثم يرسل المستخدم إلى عنوان URL هذا ليتمكّن من تسجيل الدخول. ويرسل نظام AuthSub المستخدم مرة أخرى إلى عنوان URL الذي حدّدته على موقعك الإلكتروني، ويعرض رمزًا مميزًا صالحًا للاستخدام لمرة واحدة. ويمكن لتطبيقك استبدال هذا الرمز المميز برمز مميز للجلسة. ثم يرسل تطبيقك الرمز المميز في عنوان التفويض مع كل طلب يرسله التطبيق إلى الخدمة.
تسهّل مكتبات عملاء Google Data APIs عملية منح الإذن هذه من خلال معالجة تفاصيل مختلفة نيابةً عنك. يوضّح هذا المستند كيفية إجراء ذلك.
العمل مع AuthSub وGoogle Data APIs: أمثلة على مكتبات البرامج
يعرض هذا القسم مثالاً على استخدام طرق مكتبة برامج Google Data APIs لتنفيذ الخطوات الموضّحة في قسم العمل مع AuthSub من مستندات AuthSub.
في هذا المثال، ندمج واجهة AuthSub في تطبيق ويب يتفاعل مع "تقويم Google" (مع أنّه ليس عليك معرفة أي شيء عن "تقويم Google" لمتابعة المثال). يفترض المثال أنّ تطبيق الويب مستضاف على example.com.
تحديد نوع الرمز المميّز الذي تريد استخدامه (session=0 أو session=1)
يمكنك اختيار استخدام رموز مميّزة صالحة لمرة واحدة (session=0) أو رموز مميّزة للجلسة (session=1).
سيتم استخدام رموز مميّزة للجلسة في هذا المستند، لأنّها أكثر فائدة في التطبيقات التي ستُجري طلبات متعدّدة من واجهة برمجة التطبيقات.
كما هو موضّح في مستندات AuthSub، إذا قرّرت استخدام رموز مميّزة للجلسات في تطبيق الويب، عليك إدارة تخزين الرموز المميزة بنفسك. لا يتناول هذا المستند إدارة الرموز المميزة. يُرجى أيضًا العِلم أنّه لا يمكن استبدال الرموز المميزة التي تم طلبها باستخدام session=0
لاحقًا (ترقيتها) برمز مميز لجلسة طويلة الأمد.
تحديد ما إذا كنت تريد تسجيل تطبيق الويب (secure=0 أو secure=1)
يمكن استخدام AuthSub بثلاثة أوضاع مختلفة، وهي غير مسجّل ومسجّل ومسجّل مع أمان محسّن. ستشير بقية هذا المستند إلى الخيار الأخير باسم AuthSub الآمن. على الرغم من أنّ وضع التسجيل/عدم التسجيل أسهل في الإعداد من AuthSub الآمن، تنصحك Google باستخدام الرموز المميزة الآمنة للحصول على أمان محسّن.
كيفية التسجيل
يمنح اختيار التسجيل للتطبيقات المستندة إلى الويب تطبيقك المزايا التالية:
- مستوى أمان أعلى
- أن تكون موثوقًا بها من قِبل Google (لا يتم عرض أي تحذير للمستخدم على صفحة "تفويض Google").
مسجَّل + Secure AuthSub
إذا اخترت استخدام AuthSub الآمن، عليك إنشاء مفتاح خاص RSA وشهادة عامة ذاتية التوقيع بالإضافة إلى تسجيل تطبيق الويب. اطّلِع على إنشاء مفاتيح وشهادات لاستخدامها مع الوضع المسجّل (أدناه) للاطّلاع على أمثلة حول إنشاء شهادات X.509.
تحديد نطاق الوصول إلى البيانات
تحدّد كل خدمة من خدمات Google قيمة scope تحدّد (وربما تحدّ) إذن الوصول إلى بيانات المستخدم.
اطّلِع على الأسئلة الشائعة للحصول على قائمة بقيم scope المتاحة.
بما أنّنا قرّرنا التفاعل مع Google Calendar API، يجب أن تكون قيمة scope هي http://www.google.com/calendar/feeds/.
ملاحظة: اضبط دائمًا قيمة النطاق على أوسع عنوان URL ممكن ما لم تكن بحاجة إلى قيود أكثر دقة.
على سبيل المثال، سيؤدي نطاق أضيق مثل scope=http://www.google.com/calendar/feeds/default/allcalendars/full إلى حصر إذن الوصول الممنوح للرمز المميز في خلاصة allcalendars/full فقط. سيؤدي استخدام scope=http://www.google.com/calendar/feeds/ إلى السماح بالوصول إلى جميع خلاصات "تقويم Google": http://www.google.com/calendar/feeds/*.
الرموز المميزة المتعددة النطاقات
لإنشاء رموز مميزة تتيح الوصول إلى عدة واجهات برمجة تطبيقات لبيانات Google، افصل بين كل نطاق ومساحة مشفّرة بعنوان URL. ينشئ المثال أدناه رمزًا مميزًا يمكنه الوصول إلى بيانات "جهات اتصال Google" و"تقويم Google" الخاصة بالمستخدم.
scope=http://www.google.com/calendar/feeds/%20http://www.google.com/m8/feeds/
طلب رمز مميز للمصادقة صالح للاستخدام مرة واحدة
للحصول على رمز مميّز من AuthSub لمستخدم معيّن وخدمة معيّنة، يجب أن يعيد تطبيقك توجيه المستخدم إلى عنوان URL الخاص بـ AuthSubRequest، والذي يطلب منه تسجيل الدخول إلى حسابه على Google.
(لمزيد من المعلومات حول عنوان URL الخاص بـ AuthSubRequest، يُرجى الاطّلاع على مصادقة AuthSub لتطبيقات الويب الكاملة.)
لإنشاء عنوان URL الخاص بـ AuthSubRequest في تطبيقك، استخدِم ما يلي لكل مكتبة برامج:
جافا
import com.google.gdata.client.*; String nextUrl = "http://www.example.com/RetrieveToken.jsp"; String scope = "http://www.google.com/calendar/feeds/"; boolean secure = false; // set secure=true to request secure AuthSub tokens boolean session = true; String authSubUrl = AuthSubUtil.getRequestUrl(nextUrl, scope, secure, session);
إذا كنت تريد مصادقة المستخدمين على نطاقك على G Suite، اتّبِع الخطوات التالية:
import com.google.gdata.client.*; String hostedDomain = "example.com"; String nextUrl = "http://www.example.com/RetrieveToken.jsp"; String scope = "http://www.google.com/calendar/feeds/"; boolean secure = false; // set secure=true to request AuthSub tokens boolean session = true; String authSubUrl = AuthSubUtil.getRequestUrl(hostedDomain, nextUrl, scope, secure, session);
NET.
using Google.GData.Client; String nextUrl = "http://www.example.com/RetrieveToken.aspx"; String scope = "http://www.google.com/calendar/feeds/"; bool secure = false; // set secure=true to request secure AuthSub tokens bool session = true; String authSubUrl = AuthSubUtil.getRequestUrl(nextUrl, scope, secure, session);
إذا كنت تريد مصادقة المستخدمين على نطاقك على G Suite، اتّبِع الخطوات التالية:
using Google.GData.Client; String hostedDomain = "example.com"; String nextUrl = "http://www.example.com/RetrieveToken.aspx"; String scope = "http://www.google.com/calendar/feeds/"; bool secure = false; // set secure=true to request secure AuthSub tokens bool session = true; String authSubUrl = AuthSubUtil.getRequestUrl(hostedDomain, nextUrl, scope, secure, session);
PHP
require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata_AuthSub'); $nextUrl = 'http://www.example.com/RetrieveToken.php'; $scope = 'http://www.google.com/calendar/feeds/'; $secure = 0; // set $secure=1 to request secure AuthSub tokens $session = 1; $authSubUrl = Zend_Gdata_AuthSub::getAuthSubTokenUri($nextUrl, $scope, $secure, $session);
إذا كنت تريد مصادقة المستخدمين على نطاقك على G Suite، اتّبِع الخطوات التالية:
require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata_AuthSub'); $hostedDomain = 'example.com'; $nextUrl = 'http://www.example.com/RetrieveToken.php'; $scope = 'http://www.google.com/calendar/feeds/'; $secure = 0; // set $secure=1 to request secure AuthSub tokens $session = 1; $authSubUrl = Zend_Gdata_AuthSub::getAuthSubTokenUri($nextUrl, $scope, $secure, $session) . '&hd=' . $hostedDomain;
Python
import gdata.auth next = 'http://www.example.com/RetrieveToken.pyc' scope = 'http://www.google.com/calendar/feeds/' secure = False # set secure=True to request secure AuthSub tokens session = True auth_sub_url = gdata.auth.GenerateAuthSubRequestUrl(next, scope, secure=secure, session=session)
إذا كنت تريد مصادقة المستخدمين على نطاقك على G Suite، اتّبِع الخطوات التالية:
import gdata.auth hosted_domain = 'example.com' next = 'http://www.example.com/RetrieveToken.pyc' scope = 'http://www.google.com/calendar/feeds/' secure = False # set secure=True to request secure AuthSub tokens session = True auth_sub_url = gdata.auth.GenerateAuthSubRequestUrl(next, scope, secure=secure, session=session, domain=hosted_domain)
بعد إنشاء عنوان URL "التالي"، يمكن لتطبيقك استخدامه بطرق متنوعة لإرسال المستخدم إلى معالج AuthSubRequest. الطريقة الأكثر شيوعًا هي عرض صفحة تُعلِم المستخدم أنّه بحاجة إلى اتّباع رابط للسماح لتطبيقك بالوصول إلى حسابه على Google، ثم إرفاق عنوان URL للطلب بالرابط. على سبيل المثال، يمكنك عرض السلسلة التالية في تطبيقك على الويب:
String authorizationUrl =
"<p>MyApp needs access to your Google Calendar account to read your Calendar feed. " +
"To authorize MyApp to access your account, <a href=\"" + authSubUrl + "\">log in to your account</a>.</p>";ينتقِل المستخدم إلى رابط صفحة AuthSub على Google ويسجّل الدخول. بعد ذلك، يعيد نظام AuthSub توجيه المستخدم إلى تطبيقك باستخدام عنوان URL "التالي" الذي قدّمته.
استخراج الرمز المميّز الذي يُستخدَم مرة واحدة
عندما تعيد Google التوجيه إلى تطبيقك، تتم إضافة الرمز المميز إلى عنوان URL "التالي" كمعلّمة طلب بحث. في الأمثلة أعلاه، بعد أن يسجّل المستخدم الدخول، يعيد محرّك بحث Google توجيهه إلى عنوان URL مثل http://www.example.com/RetrieveToken?token=DQAADKEDE.
يجب أن يستخرج تطبيقك قيمة الرمز المميّز من مَعلمة طلب البحث في عنوان URL.
إذا كان تطبيقك قد ضبط ملف تعريف ارتباط للمصادقة في متصفّح المستخدم قبل إرساله إلى نظام AuthSub، سيتمكّن تطبيقك عند إعادة توجيه Google إلى عنوان URL "التالي" من قراءة ملف تعريف ارتباط المصادقة للتعرّف على المستخدم الذي وصل إلى عنوان URL هذا. يمكنك استخدام ملف تعريف الارتباط هذا لربط رقم تعريف المستخدم في تطبيقك برمز AuthSub المميز الذي تم استرداده من Google.
توفّر مكتبات البرامج طرقًا سهلة لاستخراج الرمز المميز للاستخدام لمرة واحدة:
جافا
String singleUseToken = AuthSubUtil.getTokenFromReply(httpServletRequest.getQueryString());
NET.
String singleUseToken = Request.QueryString["token"]; // or String singleUseToken = AuthSubUtil.getTokenFromReply(new Uri(Request.QueryString));
PHP
$singleUseToken = $_GET['token'];Python
current_url = 'http://' + req.hostname + req.unparsed_uri # Unlike the other calls, extract_auth_sub_token_from_url() will create anAuthSubTokenorSecureAuthSubTokenobject. # Use str(single_use_token) to return the token's string value. single_use_token = gdata.auth.extract_auth_sub_token_from_url(current_url)
إذا كنت تستخدم AuthSub الآمنة، احرص على ضبط مفتاح RSA الخاص لإنشاء SecureAuthSubToken:
f = open('/path/to/yourRSAPrivateKey.pem') rsa_key = f.read() f.close() current_url = 'http://' + req.hostname + req.unparsed_uri # Unlike the other calls, extract_auth_sub_token_from_url() will create anAuthSubTokenorSecureAuthSubTokenobject. # Use str(single_use_token) to return the token's string value. single_use_token = gdata.auth.extract_auth_sub_token_from_url(current_url, rsa_key=rsa_key)
طلب رمز مميّز للجلسة
الرمز المميّز الذي تستردّه من عنوان URL هو دائمًا رمز مميّز للاستخدام مرة واحدة. الخطوة التالية هي ترقية هذا الرمز المميز إلى رمز مميز لجلسة طويلة الأمد باستخدام عنوان URL AuthSubSessionToken، كما هو موضح في مستند مصادقة AuthSub لتطبيقات الويب الكامل. إذا كنت تستخدم AuthSub الآمنة، عليك ضبط مفتاح RSA الخاص قبل إجراء عملية التبديل. في ما يلي بعض الأمثلة باستخدام كلّ من مكتبات البرامج:
جافا
import com.google.gdata.client.*; import com.google.gdata.client.calendar.*; String sessionToken = AuthSubUtil.exchangeForSessionToken(singleUseToken, null); CalendarService calendarService = new CalendarService("google-ExampleApp-v1.0"); calendarService.setAuthSubToken(sessionToken, null); // ready to interact with Calendar feeds
بالنسبة إلى AuthSub الآمن، مرِّر مفتاح RSA الخاص إلى exchangeForSessionToken بدلاً من تمرير null:
import com.google.gdata.client.*; import com.google.gdata.client.calendar.*; java.security.PrivateKey privateKey = AuthSubUtil.getPrivateKeyFromKeystore("AuthSubExample.jks", "privKeyPa$$word", "AuthSubExample", "privKeyPa$$word"); String sessionToken = AuthSubUtil.exchangeForSessionToken(singleUseToken, privateKey); CalendarService calendarService = new CalendarService("google-ExampleApp-v1.0"); calendarService.setAuthSubToken(sessionToken, privateKey); // ready to interact with Calendar feeds
NET.
using Google.GData.Client; using Google.GData.Calendar; String sessionToken = AuthSubUtil.exchangeForSessionToken(singleUseToken, null).ToString(); GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("cl", "google-ExampleApp-v1.0"); authFactory.Token = (String) sessionToken; CalendarService calendarService = new CalendarService(authFactory.ApplicationName); calendarService.RequestFactory = authFactory; // ready to interact with Calendar feeds
بالنسبة إلى AuthSub الآمن، مرِّر مفتاح RSA الخاص إلى exchangeForSessionToken بدلاً من تمرير null:
using Google.GData.Client; using Google.GData.Calendar; protected AsymmetricAlgorithm getRsaKey() { X509Certificate2 cert = new X509Certificate2("C:/MyAspSite/test_cert.pfx", "privKeyPa$$word"); RSACryptoServiceProvider privateKey = cert.PrivateKey as RSACryptoServiceProvider; return privateKey; } AsymmetricAlgorithm rsaKey = getRsaKey(); String sessionToken = AuthSubUtil.exchangeForSessionToken(singleUseToken, rsaKey).ToString(); GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("cl", "google-ExampleApp-v1.0"); authFactory.Token = (String) sessionToken; authFactory.PrivateKey = rsaKey; CalendarService calendarService = new CalendarService(authFactory.ApplicationName); calendarService.RequestFactory = authFactory; // ready to interact with Calendar feeds
PHP
require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata_AuthSub'); Zend_Loader::loadClass('Zend_Gdata_Calendar'); $sessionToken = Zend_Gdata_AuthSub::getAuthSubSessionToken($singleUseToken); // Create a Calendar service object and set the session token for subsequent requests $calendarService = new Zend_Gdata_Calendar(null, 'google-ExampleApp-v1.0'); $calendarService->setAuthSubToken($sessionToken); // ready to interact with Calendar feeds
لإجراء عملية تبادل آمنة باستخدام AuthSub، عليك أولاً إعداد Zend_Gdata_HttpClient وضبط مفتاح RSA الخاص باستخدام setAuthSubPrivateKeyFile():
require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata_AuthSub'); Zend_Loader::loadClass('Zend_Gdata_Calendar'); $client = new Zend_Gdata_HttpClient(); $client->setAuthSubPrivateKeyFile('/path/to/myrsakey.pem', null, true); $sessionToken = Zend_Gdata_AuthSub::getAuthSubSessionToken($singleUseToken, $client); $calendarService = new Zend_Gdata_Calendar($client, 'google-ExampleApp-v1.0'); $calendarService->setAuthSubToken($sessionToken); // ready to interact with Calendar feeds
Python
import gdata.calendar import gdata.calendar.service calendar_service = gdata.calendar.service.CalendarService() calendar_service.UpgradeToSessionToken(single_use_token) # calls gdata.service.SetAuthSubToken() for you # ready to interact with Calendar feeds
ملاحظة: تكون العملية هي نفسها بالنسبة إلى AuthSub الآمنة طالما أنّك استخدمت
gdata.auth.extract_auth_sub_token_from_url(url, rsa_key=rsa_key)
لاستخراج الرمز المميّز الذي يُستخدَم مرة واحدة.
ملاحظة: عند استخدام AuthSub الآمن، لا يتم إرسال مفتاحك الخاص عبر الشبكة. ترسل مكتبات البرامج التوقيع الفريد الذي تم إنشاؤه من خلال توقيع الطلب باستخدام مفتاحك، وليس المفتاح نفسه.
استخدام الرمز المميّز للجلسة
يمكنك استخدام الرمز المميز للجلسة للمصادقة على الطلبات المُرسَلة إلى الخادم من خلال وضع الرمز المميز في عنوان Authorization، كما هو موضّح في مستندات AuthSub.
بعد ضبط رمز الجلسة، يمكنك استخدام طلبات مكتبة برامج Google Data APIs العادية للتفاعل مع الخدمة، بدون الحاجة إلى التفكير في الرمز. للحصول على التفاصيل، يُرجى الاطّلاع على مستندات مكتبة البرامج ودليل المطوّر الخاص بخدمات Google Data APIs للخدمة واللغة اللتين تتفاعل معهما.
استرداد معلومات عن رمز مميّز للجلسة
إذا أردت اختبار تطابق معلمات الرمز المميّز بين العميل والخادم، يمكنك تمرير الرمز المميّز إلى المعالج AuthSubTokenInfo الذي يعرض مجموعة من أزواج الاسم والقيمة التي تتضمّن معلومات حول الرمز المميّز.
جافا
Map<String, String> tokenInfo = AuthSubUtil.getTokenInfo(sessionToken, null);
في حال استخدام AuthSub الآمن، مرِّر مفتاح RSA الخاص:
Map<String, String> tokenInfo = AuthSubUtil.getTokenInfo(sessionToken, privateKey);
NET.
Dictionary<String, String> tokenInfo = AuthSubUtil.GetTokenInfo(sessionToken, null);
في حال استخدام AuthSub الآمن، مرِّر مفتاح RSA الخاص:
Dictionary<String, String> tokenInfo = AuthSubUtil.GetTokenInfo(sessionToken, privateKey);
PHP
$tokenInfo = Zend_Gdata_AuthSub::getAuthSubTokenInfo($sessionToken);في حال استخدام AuthSub الآمن، مرِّر Zend_Gdata_HttpClient ليتم توقيع الطلب باستخدام مفتاح RSA الخاص بك:
$tokenInfo = Zend_Gdata_AuthSub::getAuthSubTokenInfo($sessionToken, $client);Python
token_info = calendar_service.AuthSubTokenInfo()
إبطال رمز مميّز للجلسة
لا تنتهي صلاحية الرموز المميزة لجلسة AuthSub، ويمكن لبرنامجك تخزين الرمز المميز للجلسة طالما دعت الحاجة إلى ذلك.
لذلك، عندما ينتهي عميلك من استخدام رمز الجلسة، يمكنه إبطال الرمز باستخدام المعالج AuthSubRevokeToken، كما هو موضّح في مستندات AuthSub.
على سبيل المثال، إذا كنت تريد إدارة الرموز المميزة بطريقة تقليدية تشبه الجلسة، يمكن لبرنامجك الحصول على رمز مميز في بداية جلسة المستخدم وإبطاله في نهايتها.
لإبطال رمز مميّز، استخدِم ما يلي في كل مكتبة برامج للعملاء:
جافا
AuthSubUtil.revokeToken(sessionToken, null);
في حال استخدام AuthSub الآمن، مرِّر مفتاح RSA الخاص:
AuthSubUtil.revokeToken(sessionToken, privateKey);
NET.
AuthSubUtil.revokeToken(sessionToken, null);
في حال استخدام AuthSub الآمن، مرِّر مفتاح RSA الخاص:
AuthSubUtil.revokeToken(sessionToken, privateKey);
PHP
$wasRevoked = Zend_Gdata_AuthSub::AuthSubRevokeToken($sessionToken);في حال استخدام AuthSub الآمن، مرِّر Zend_Gdata_HttpClient ليتم توقيع الطلب باستخدام مفتاح RSA الخاص بك:
$wasRevoked = Zend_Gdata_AuthSub::AuthSubRevokeToken($sessionToken, $client);Python
calendar_service.RevokeAuthSubToken()
مراجع وعيّنات إضافية
- أمثلة على AuthSub في مدونة نصائح حول Google Data API
- نموذج AuthSub لمكتبة برامج Python
- مكتبة برامج Java عيّنة AuthSub
- المقالة: استخدام AuthSub مع مكتبة برامج .NET
- المقالة: استخدام مصادقة AuthSub مع مكتبة عميل JavaScript
إنشاء مفتاح خاص للتوقيع الذاتي وشهادة عامة لاستخدامها مع AuthSub الآمن
يُستخدَم المفتاح الخاص لإنشاء توقيع يجب تضمينه مع كل طلب. تستخدم Google المفتاح العام المضمّن في الشهادة للتحقّق من التوقيع. يجب أن يكون المفتاح العام مفتاح RSA بحجم 1024 بت مشفّرًا في شهادة X.509 بتنسيق PEM. يجب إرسال الشهادة إلى Google عند التسجيل.
تقدّم الأقسام التالية أمثلة على كيفية إنشاء المفاتيح والشهادات باستخدام أداتَين معيّنتَين: الأداة المساعدة OpenSSL والأداة المساعدة keytool في Java.
لا ترتبط هذه الأمثلة بواجهات Google Data APIs تحديدًا، ويمكنك استخدام الأدوات المساعدة نفسها لإنشاء مفاتيح لأي غرض.
تفترض الأمثلة أنّ اسم شركتك هو My_Company، وأنّها تقع في ماونتن فيو، كاليفورنيا، الولايات المتحدة، واسم النطاق هو example.com.
إنشاء المفاتيح باستخدام OpenSSL
لإنشاء زوج من مفاتيح RSA والشهادة المقابلة، يمكنك استخدام الأمر التالي:
# Generate the RSA keys and certificate openssl req -x509 -nodes -days 365 -newkey rsa:1024 -sha1 -subj \ '/C=US/ST=CA/L=Mountain View/CN=www.example.com' -keyout \ myrsakey.pem -out /tmp/myrsacert.pem
تحذير: يؤدي تضمين المَعلمة -nodes إلى إنشاء مفتاح خاص بدون كلمة مرور لحمايته.
ومع ذلك، ننصحك بحذف هذه المَعلمة لتعزيز الأمان.
تحدّد المَعلمة -sha1 أنّه سيتم استخدام المفتاح لإنشاء توقيعات SHA1.
تحدّد المَعلمة -subj هوية التطبيق الذي تمثّله الشهادة.
تحدّد المَعلمة -keyout الملف الذي سيحتوي على المفاتيح.
يحتوي هذا الملف على معلومات حساسة ويجب حمايته وعدم مشاركته مع أي شخص.
تحدّد المَعلمة -out الملف الذي سيحتوي على الشهادة بتنسيق PEM
(والذي يمكن إرساله إلى Google أثناء التسجيل).
إنشاء مفاتيح لبرنامج .NET
لا يفهم إطار عمل .NET المفاتيح أو الشهادات المخزّنة بتنسيق PEM. لذلك، يجب اتّخاذ خطوة إضافية بعد إنشاء ملف .pem:
openssl pkcs12 -export -in test_cert.pem -inkey myrsacert.pem -out myrsacert.pfx -name "Testing Certificate"
تنشئ هذه الخطوة ملف PFX من مفتاحك الخاص وشهادتك. يمكن استيراد هذا الملف إلى مكتبة برامج عميل .NET لتوقيع الطلبات التي يتم إرسالها إلى Google Data APIs رقميًا.
إنشاء مفاتيح لبرنامج Java
يقبل برنامج Java الخادم المفاتيح الخاصة بتنسيق PKCS#8. بعد إنشاء مفتاح/شهادة باستخدام الإرشادات أعلاه، أنشئ ملف .pk8 من ملف .pem الذي أنشأته:
openssl pkcs8 -in myrsakey.pem -topk8 -nocrypt -out myrsakey.pk8
بدلاً من ذلك، يمكنك استخدام مخزن مفاتيح Java وأداة keytool لإنشاء زوج من مفاتيح RSA والشهادة المقابلة. استخدِم الأمر التالي:
# Generate the RSA keys and certificate keytool -genkey -v -alias Example -keystore ./Example.jks\ -keyalg RSA -sigalg SHA1withRSA\ -dname "CN=www.example.com, OU=Engineering, O=My_Company, L=Mountain View, ST=CA, C=US"\ -storepass changeme -keypass changeme
تحذير: "changeme" ليست كلمة مرور جيدة، هذا مجرد مثال.
تحدّد المَعلمة -dname هوية التطبيق الذي تمثّله الشهادة. تحدّد المَعلمة -storepass كلمة المرور المستخدَمة لحماية ملف تخزين المفاتيح. تحدّد المَعلمة -keypass كلمة المرور المستخدَمة لحماية المفتاح الخاص.
لكتابة الشهادة في ملف يمكن استخدامه في أداة ManageDomains، استخدِم الأمر التالي:
# Output the public certificate to a file keytool -export -rfc -keystore ./Example.jks -storepass changeme \ -alias Example -file mycert.pem