‫AuthSub בספריות הלקוח של Google Data Protocol

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

במאמר הזה מוסבר איך להשתמש בספריות הלקוח של Google Data API כדי להתחבר ל-AuthSub Authentication for Web Applications של Google.

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

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

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

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

עבודה עם AuthSub וממשקי Google Data API: דוגמאות של ספריות לקוח

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

איך להירשם

אם בוחרים באפשרות Registration for Web-Based Applications (הרשמה לאפליקציות מבוססות-אינטרנט), האפליקציה מקבלת את היתרונות הבאים:

  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/full feed. השימוש ב-scope=http://www.google.com/calendar/feeds/ יאפשר גישה לכל הפידים של היומן: http://www.google.com/calendar/feeds/*.

טוקנים עם כמה היקפי הרשאות

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

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 handler. הגישה הנפוצה ביותר היא להציג דף שבו נאמר למשתמש שהוא צריך ללחוץ על קישור כדי לאשר לאפליקציה לגשת לחשבון 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.

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

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

אם רוצים לבדוק שהלקוח והשרת מסכימים על הפרמטרים של האסימון, אפשר להעביר את האסימון אל ה-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 של 1,024 ביט שמקודד באישור 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

‫Framework ‏‎ .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 key store ובכלי 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

חזרה למעלה