AuthSub בספריות הלקוח של פרוטוקול הנתונים של Google

אזהרה: דף זה עוסק בממשקי API הישנים יותר של Google, בממשקי ה-API של נתוני Google, והוא רלוונטי רק לממשקי ה-API שרשומים בספריית ממשקי ה-API של נתוני Google, שרבים מהם הוחלפו בממשקי API חדשים יותר. למידע על API חדש ספציפי, עיינו במסמכי התיעוד של ה-API החדש. למידע על הרשאת בקשות באמצעות ממשק API חדש יותר, יש לעיין בקטע אימות והרשאה של חשבונות Google.

מסמך זה מתאר כיצד להשתמש בספריות הלקוח של Google Data API כדי להתחבר אל אימות AuthSub של Google עבור יישומי אינטרנט.

ממשק AuthSub מאפשר לאפליקציה מבוססת-אינטרנט לגשת לשירות Google בשם משתמש. כדי לשמור על רמת אבטחה גבוהה, ממשק AuthSub מאפשר לאפליקציה לקבל אסימון אימות מבלי לטפל בפרטי ההתחברות של חשבון המשתמש.

ספריות הלקוח של Google Data API מספקות שיטות שיעזרו לך להשתמש ב-AuthSub באפליקציית האינטרנט. באופן ספציפי, קיימות שיטות לבניית כתובת האתר של הבקשה, רכישת אסימון אימות לשימוש חד-פעמי, החלפת האסימון לשימוש חד-פעמי באסימון הפעלה, וחתימה על הבקשה.

הערה: לספריית הלקוחות של JavaScript יש הטעם האישי של AuthSub, שנקרא AuthSubJS. למידע על השימוש ב-AuthSubJS באפליקציות JavaScript, ניתן לעיין במאמר שימוש באימות "AuthSub" בספריית הלקוח של JavaScript.

Audience

מסמך זה מיועד למתכנתים שמעוניינים שהאפליקציות מבוססות האינטרנט שלהם ייגשו לשירותי 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). במסמך הזה ייעשה שימוש באסימוני סשנים, כי הם שימושיים יותר באפליקציות שמוגשות בהן מספר בקשות API. כפי שצוין בתיעוד של AuthSub, אם ברצונך להשתמש באסימוני סשנים באפליקציה האינטרנט שלך, עליך לנהל את אחסון האסימון בעצמך. המסמך הזה לא עוסק בניהול אסימונים. כמו כן, חשוב לציין שלא ניתן להחליף (לאחר) אסימונים עם session=0 לאסימון סשן לטווח ארוך.

עליך להחליט אם לרשום את אפליקציית האינטרנט שלך (secure=0 או secure=1)

ניתן להשתמש ב-AuthSub בשלושה מצבים שונים, לא רשום, רשום ורשום עם אבטחה משופרת. המשך המסמך יתייחס לאפשרות האחרונה ש-AuthSub מאובטח. למרות שקל יותר להגדיר מצב לא רשום/רשום מ-AuthSub מאובטח, Google ממליצה להשתמש באסימונים מאובטחים לשיפור האבטחה.

כיצד להירשם

הבחירה בהרשמה לאפליקציות מבוססות אינטרנט מעניקה לאפליקציה שלך את היתרונות הבאים:

  1. רמת אבטחה גבוהה יותר.
  2. אמינות על ידי Google (לא מוצגת אזהרה למשתמש בדף ההרשאה של Google).

AuthSub רשום + מאובטח

אם החלטת להשתמש ב-AuthSub מאובטח, יהיה עליך ליצור צמד RSA פרטי לחתימה עצמית והתאמת אישור ציבורי, בנוסף לרישום טופס האינטרנט שלך. כדי לראות דוגמאות ליצירת אישורי X.509, ניתן לעיין בקטע יצירת מפתחות ואישורים לשימוש במצב רשום (בהמשך).

קביעת היקף הגישה לנתונים

כל שירות של Google מגדיר ערך scope שקובע את (ואולי) מצמצם את הגישה של אסימון לנתוני המשתמש. בשאלות נפוצות מוצגת רשימה של ערכי scope זמינים.

בגלל שהחלטנו ליצור אינטראקציה עם ה-API של יומן Google, scope צריך להיות http://www.google.com/calendar/feeds/.

הערה: מומלץ תמיד להגדיר את ערך ההיקף לכתובת ה-URL הרחבה ביותר האפשרית, אלא אם אתם זקוקים להגבלה עדינה יותר. לדוגמה, היקף מצומצם יותר כמו scope=http://www.google.com/calendar/feeds/default/allcalendars/full יגביל את הגישה של האסימון רק לכל היומנים/הפיד המלא. שימוש ב-scope=http://www.google.com/calendar/feeds/ יאפשר גישה לכל העדכונים של יומן Google: http://www.google.com/calendar/feeds/*.

אסימונים מרובי היקפים

כדי ליצור אסימונים שניגשים למספר ממשקי API של נתונים של Google, מפרידים כל היקף באמצעות שטח שמקודד בכתובת ה-URL. בדוגמה הבאה נוצר אסימון שיאפשר גישה לנתוני אנשי הקשר מחשבון Google וליומן Google.

scope=http://www.google.com/calendar/feeds/%20http://www.google.com/m8/feeds/

בקשת אסימון אימות חד-פעמי

כדי לקבל אסימון AuthSub עבור משתמש נתון ושירות נתון, האפליקציה שלך חייבת להפנות את המשתמש לכתובת האתר AuthSubRequest, המבקשת ממנו להתחבר לחשבון Google שלו. (למידע נוסף על כתובת האתר AuthSubRequest, עיין באימות מלא של AuthSub עבור יישומי אינטרנט.)

כדי ליצור את כתובת ה-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 "הבא", האפליקציה יכולה להשתמש בה במגוון דרכים כדי לשלוח את המשתמש ל-handler של 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 מפנה חזרה לאפליקציה שלך, האסימון מצורף לכתובת האתר "הבא" כפרמטר של שאילתה. במקרה של הדוגמאות שלמעלה, אחרי שהמשתמש מתחבר, Google מפנה לכתובת URL כמו http://www.example.com/RetrieveToken?token=DQAADKEDE. האפליקציה שלכם צריכה לחלץ את ערך האסימון מהפרמטר של שאילתה בכתובת ה-URL.

אם האפליקציה שלך מגדירה קובץ cookie לאימות בדפדפן של המשתמש לפני שליחתו למערכת AuthSub, כאשר Google מפנה מחדש לכתובת האתר "הבא", האפליקציה שלך יכולה לקרוא את קובץ ה-cookie לאימות כדי לזהות איזה משתמש הגיע לכתובת האתר הזו. קובץ Cookie כזה מאפשר לך לשייך מזהה משתמש לאפליקציה לאסימון 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 לאפליקציות אינטרנט. אם אתם משתמשים ב-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 מאובטח, Exchange מחייב אותך להגדיר תחילה 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 לשירות ולשפה שאתם מקיימים איתם אינטראקציה.

אחזור מידע על אסימון ביקור

כדי לבדוק אם הלקוח והשרת מסכימים על הפרמטרים של האסימון, אפשר להעביר את האסימון ל-handler של 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 לסשן לא פג, הלקוח יכול לאחסן את אסימון הסשן למשך הזמן הנדרש.

לכן, כשהלקוח מסיים להשתמש באסימון הסשן, הוא יכול לבטל את האסימון באמצעות ה-handler של 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 של Java.

הדוגמאות האלה לא ספציפיות לממשקי Google Data API. אפשר להשתמש באותם כלים כדי ליצור מפתחות לכל מטרה.

הדוגמאות מבוססות על ההנחה שהחברה שלכם נקראת 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 .כדי לחתום באופן דיגיטלי על בקשות שנשלחו לממשקי API של Google Data.

יצירת מפתחות עבור לקוח Java

לקוח Java מקבל מפתחות פרטיים בפורמט PKCS#8. אחרי שיוצרים מפתח או אישור לפי ההוראות שלמעלה, יוצרים קובץ .pk8 מקובץ ה- .pem שנוצר:

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

לחלופין, תוכלו להשתמש במאגר המפתחות של Java ובכלי המפתח כדי ליצור זוג מפתחות 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

חזרה למעלה