AuthSub في مكتبات عميل بروتوكول بيانات Google

تحذير: تتعلق هذه الصفحة بواجهات برمجة التطبيقات القديمة من Google، وهي واجهات برمجة التطبيقات لبيانات Google؛ وهي مرتبطة فقط بواجهات برمجة التطبيقات المدرجة في دليل Google Data APIs، والتي تم استبدال العديد منها بواجهات برمجة تطبيقات أحدث. للحصول على معلومات حول واجهة برمجة تطبيقات جديدة، اطلع على وثائق واجهة برمجة التطبيقات الجديدة. للحصول على معلومات حول تفويض الطلبات باستخدام واجهة برمجة تطبيقات أحدث، اطلع على مصادقة حسابات Google وتفويضها.

يصف هذا المستند كيفية استخدام مكتبات برامج واجهة برمجة تطبيقات بيانات Google للاتصال بمصادقة OAuthSub لتطبيقات الويب من 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 تشجّعك على استخدام الرموز المميّزة الآمنة لتوفير الأمان المحسّن.

كيفية التسجيل

اختيار التسجيل للتطبيقات المستندة إلى الويب يمنح تطبيقك الفوائد التالية:

  1. مستوى أمان أعلى.
  2. الوثوق في Google (لن يتم عرض تحذير للمستخدم على صفحة تفويض Google).

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/كاملة. سيتيح استخدام scope=http://www.google.com/calendar/feeds/ الوصول إلى جميع خلاصات التقويم: 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، اطلع على AuthAuth للمصادقة على تطبيقات الويب بالكامل.)

لإنشاء عنوان URL AuthSubRequest في تطبيقك، استخدم ما يلي لكل مكتبة برامج:

لغة Java

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 "التالي" كمعلمة طلب بحث. في المثال السابق، بعد أن يسجّل المستخدم دخوله، يعيد التوجيه إلى عنوان URL مثل http://www.example.com/RetrieveToken?token=DQAADKEDE. ينبغي أن يستخرج تطبيقك قيمة الرمز المميز من معلمة طلب بحث عنوان URL.

إذا عيّن التطبيق ملف تعريف ارتباط المصادقة في متصفح المستخدم قبل إرساله إلى نظام AuthSub، فحينئذٍ عندما يعيد Google التوجيه إلى عنوان URL "التالي"، يمكن لتطبيقك قراءة ملف تعريف ارتباط المصادقة للتعرف على المستخدم الذي وصل إلى عنوان URL هذا. يمكنك استخدام ملف تعريف الارتباط هذا لربط رقم تعريف مستخدم في تطبيقك برمز AuthSub المميز الذي تم استرداده من Google.

توفر مكتبات العملاء طرقًا ملائمة لاستخراج الرمز المميز الذي يُستخدم لمرة واحدة:

لغة Java

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 an AuthSubToken or SecureAuthSubToken object.
# 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 an AuthSubToken or SecureAuthSubToken object.
# 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 Authentication for Web Applications الكاملة. إذا كنت تستخدم AuthSub آمنًا، يجب تعيين مفتاح RSA الخاص قبل إجراء عملية التبادل. في ما يلي بعض الأمثلة على استخدام كل مكتبة من مكتبات العملاء:

لغة Java

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 آمن، لا يتم إرسال مفتاحك الخاص عبر الشبكة. تُرسِل مكتبات العملاء التوقيع الفريد الذي يتم إنشاؤه من خلال توقيع الطلب باستخدام المفتاح، وليس المفتاح نفسه.

استخدام الرمز المميز للجلسة

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

بعد تعيين الرمز المميز للجلسة، يمكنك استخدام استدعاءات مكتبة عميل Google Data APIs القياسية للتفاعل مع الخدمة، دون الحاجة إلى التفكير في الرمز المميز. ولمعرفة التفاصيل، يُرجى الاطّلاع على وثائق مكتبة العميل ودليل مطوّري برامج Google Data APIs للخدمة واللغة التي تتفاعل معهما.

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

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

لغة Java

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.

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

لإبطال رمز مميز، استخدم ما يلي في كل مكتبة برامج:

لغة Java

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 المفتاح العام المضمّن في الشهادة للتحقّق من التوقيع. يجب أن يكون المفتاح العام مفتاح RSA 1024 بت مُشفَّر في شهادة X.509 بتنسيق PEM. ويجب إرسال الشهادة إلى Google عند التسجيل.

تقدم الأقسام التالية أمثلة على كيفية إنشاء المفاتيح والشهادات باستخدام أداتين خاصتين: الأداة OpenSSL وأداة keytool البرمجية في جافا.

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

تفترض الأمثلة أن شركتك تسمى 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.

جارٍ إنشاء المفاتيح لبرنامج جافا

يقبل برنامج جافا المفاتيح الخاصة بتنسيق PKCS#8. بعد إنشاء مفتاح/شهادة باستخدام الإرشادات أعلاه، أنشئ ملف .pk8 من ملف pem .الذي تم إنشاؤه:

openssl pkcs8 -in myrsakey.pem -topk8 -nocrypt -out myrsakey.pk8

بدلاً من ذلك، يمكنك استخدام مخزن مفاتيح جافا وأداة الأداة المساعدة لإنشاء زوج من مفاتيح 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 كلمة المرور لحماية المفتاح الخاص.

لكتابة الشهادة في ملف يمكن استخدامه في أداة إدارة النطاقات، استخدِم الأمر التالي:

# Output the public certificate to a file
keytool -export -rfc -keystore ./Example.jks -storepass changeme \
  -alias Example -file mycert.pem

الرجوع إلى الأعلى