AuthSub trong Thư viện ứng dụng giao thức dữ liệu của Google

Cảnh báo: Trang này giới thiệu về các API cũ của Google, API dữ liệu của Google; trang này chỉ liên quan đến các API được liệt kê trong thư mục API dữ liệu của Google, nhiều API trong số này đã được thay thế bằng các API mới hơn. Để biết thông tin về một API mới cụ thể, hãy xem tài liệu của API mới. Để biết thông tin về việc uỷ quyền cho các yêu cầu bằng một API mới hơn, hãy xem phần Xác thực và ủy quyền tài khoản Google.

Tài liệu này mô tả cách sử dụng thư viện ứng dụng API Dữ liệu của Google để kết nối với Xác thực AuthSub của Google cho ứng dụng web.

Giao diện AuthSub cho phép ứng dụng dựa trên nền tảng web truy cập vào dịch vụ của Google thay mặt cho người dùng. Để duy trì mức độ bảo mật cao, giao diện AuthSub cho phép ứng dụng nhận mã thông báo xác thực mà không cần xử lý thông tin đăng nhập tài khoản của người dùng.

Thư viện ứng dụng Google Data API cung cấp các phương thức giúp bạn sử dụng AuthSub trong ứng dụng web. Cụ thể, có các phương thức để tạo URL yêu cầu, lấy mã thông báo xác thực dùng một lần, trao đổi mã thông báo dùng một lần để lấy mã thông báo phiên và ký yêu cầu.

Lưu ý: Thư viện ứng dụng JavaScript có phiên bản AuthSub riêng biệt, được gọi là AuthSubJS. Để biết thông tin về cách sử dụng AuthSubJS trong các ứng dụng JavaScript của bạn, hãy xem Sử dụng Xác thực "AuthSub" với Thư viện ứng dụng JavaScript.

Đối tượng người xem

Tài liệu này dành cho những lập trình viên muốn các ứng dụng dựa trên nền tảng web của họ truy cập vào các dịch vụ của Google thay mặt người dùng bằng cách sử dụng thư viện ứng dụng API của Google Data.

Tài liệu này giả định rằng bạn đã quen thuộc với giao diện AuthSub và quy trình chung để kết hợp AuthSub vào ứng dụng web của bạn. Để xem nội dung mô tả đầy đủ về giao thức của AuthSub, hãy xem phần Xác thực AuthSub cho ứng dụng web.

Sử dụng AuthSub và Google Data API mà không cần thư viện ứng dụng

Nếu muốn ứng dụng web của mình tương tác với một dịch vụ dữ liệu của Google bằng AuthSub làm hệ thống xác thực, thì bạn thực sự cần biết mọi thứ trong phần Xác thực AuthSub cho ứng dụng web. Bạn không cần phải sử dụng thư viện ứng dụng Google Data API nếu không muốn.

Sau đây là bản tóm tắt về cách ứng dụng của bạn có thể xác thực người dùng bằng AuthSub:

Ứng dụng của bạn tạo URL AuthSub thích hợp rồi đưa người dùng đến URL đó để họ có thể đăng nhập; hệ thống AuthSub đưa người dùng quay lại URL trên trang web mà bạn đã chỉ định và trả về mã thông báo sử dụng một lần; ứng dụng của bạn không bắt buộc phải trao đổi mã thông báo đó cho mã thông báo phiên; sau đó ứng dụng của bạn sẽ gửi mã thông báo trong tiêu đề Uỷ quyền với mỗi yêu cầu mà ứng dụng gửi đến dịch vụ.

Thư viện ứng dụng API Dữ liệu của Google đơn giản hoá quy trình cấp phép này bằng cách xử lý nhiều chi tiết cho bạn. Tài liệu này giải thích cách thực hiện.

Làm việc với AuthSub và Google Data API: ví dụ về thư viện ứng dụng

Phần này cho thấy ví dụ về việc sử dụng các phương thức thư viện ứng dụng API của Google Data để làm theo các bước được nêu trong phần "Làm việc với AuthSub" của tài liệu AuthSub.

Trong ví dụ này, chúng tôi sẽ tích hợp giao diện AuthSub vào một ứng dụng web tương tác với Lịch Google (mặc dù bạn không cần phải biết gì về Lịch Google để làm theo ví dụ này). Ví dụ này giả định ứng dụng web được lưu trữ tại example.com.

Quyết định loại mã thông báo sẽ sử dụng (session=0 hoặc session=1)

Bạn có thể chọn dùng mã thông báo dùng một lần (session=0) hoặc mã thông báo phiên (session=1). Tài liệu này sẽ dùng mã thông báo phiên vì chúng hữu ích hơn trong các ứng dụng tạo ra nhiều yêu cầu API. Như đã thảo luận trong tài liệu AuthSub, nếu quyết định sử dụng mã thông báo phiên trong ứng dụng web của mình, bạn sẽ cần tự quản lý bộ nhớ mã thông báo. Tài liệu này không bao gồm việc quản lý mã thông báo. Ngoài ra, xin lưu ý rằng sau này, bạn không thể trao đổi (nâng cấp) các mã thông báo được yêu cầu bằng session=0 sang một mã thông báo phiên hoạt động dài hạn.

Quyết định đăng ký ứng dụng web của bạn (secure=0 hay secure=1)

Bạn có thể sử dụng AuthSub ở ba chế độ: chưa đăng ký, đã đăng kýđã đăng ký bằng cơ chế bảo mật nâng cao. Phần còn lại của tài liệu này sẽ tham chiếu đến lựa chọn cuối cùng là AuthSub an toàn. Mặc dù chế độ chưa đăng ký/đăng ký dễ thiết lập hơn so với AuthSub, nhưng bạn nên sử dụng mã thông báo bảo mật để bảo mật nâng cao.

Cách đăng ký

Việc chọn Đăng ký cho ứng dụng dựa trên web mang lại cho ứng dụng của bạn những lợi ích sau:

  1. Cấp độ bảo mật cao hơn.
  2. Được Google tin cậy (không có cảnh báo nào hiển thị với người dùng trên trang Uỷ quyền của Google).

Đăng ký + Xác thực bảo mật

Nếu bạn quyết định về AuthSub an toàn, bạn cần tạo khóa riêng tư và cặp chứng chỉ công khai RSA ngoài việc đăng ký ứng dụng web của mình. Xem Tạo khóa và chứng chỉ để sử dụng với chế độ đã đăng ký (bên dưới) để biết ví dụ về cách tạo chứng chỉ X.509.

Xác định phạm vi truy cập vào dữ liệu của bạn

Mỗi dịch vụ của Google đều xác định một giá trị scope giúp xác định (và có thể thu hẹp) quyền truy cập của mã thông báo vào dữ liệu của người dùng. Xem mục Câu hỏi thường gặp để biết danh sách các giá trị scope hiện có.

Vì chúng tôi quyết định tương tác với API Lịch Google, nên scope sẽ là http://www.google.com/calendar/feeds/.

Lưu ý: Luôn đặt giá trị phạm vi thành URL rộng nhất có thể trừ khi bạn cần một hạn chế tốt hơn. Ví dụ: phạm vi hẹp hơn như scope=http://www.google.com/calendar/feeds/default/allcalendars/full sẽ hạn chế quyền truy cập của mã thông báo vào chỉ mọi lịch/nguồn cấp dữ liệu đầy đủ. Sử dụng scope=http://www.google.com/calendar/feeds/ sẽ cho phép truy cập vào tất cả các nguồn cấp dữ liệu của Lịch: http://www.google.com/calendar/feeds/*.

Mã thông báo đa phạm vi

Để tạo mã truy cập truy cập nhiều API dữ liệu của Google, hãy tách riêng từng phạm vi bằng một dấu cách được mã hoá theo URL. Ví dụ dưới đây sẽ tạo ra một mã thông báo mà người dùng có thể truy cập vào cả Danh bạ Google và dữ liệu Lịch Google của người dùng.

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

Yêu cầu mã thông báo xác thực dùng một lần

Để có được mã thông báo AuthSub cho một người dùng và một dịch vụ nhất định, ứng dụng phải chuyển hướng người dùng đến URL AuthSubRequest. URL này sẽ nhắc họ đăng nhập vào Tài khoản Google. (Để biết thêm thông tin về URL AuthSubRequest, hãy xem Xác thực toàn bộ AuthSub cho ứng dụng web.)

Để tạo URL AuthSubRequest trong ứng dụng, hãy sử dụng mã sau cho từng thư viện ứng dụng:

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);

Nếu bạn muốn xác thực người dùng trên miền G Suite của mình:

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);

Nếu bạn muốn xác thực người dùng trên miền G Suite của mình:

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);

Nếu bạn muốn xác thực người dùng trên miền G Suite của mình:

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)

Nếu bạn muốn xác thực người dùng trên miền G Suite của mình:

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)

Sau khi tạo URL "tiếp theo", ứng dụng của bạn có thể sử dụng URL đó theo nhiều cách để đưa người dùng đến trình xử lý AuthSubRequest. Phương pháp phổ biến nhất là hiển thị một trang cho người dùng biết rằng họ cần đi theo một đường liên kết để cho phép ứng dụng của bạn truy cập vào Tài khoản Google của họ; sau đó đính kèm URL yêu cầu vào đường liên kết. Ví dụ: bạn có thể xuất chuỗi sau vào ứng dụng web của mình:

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>";

Người dùng nhấp vào đường liên kết đến trang AuthSub tại Google và đăng nhập. Sau đó, hệ thống AuthSub sẽ chuyển hướng người dùng quay lại ứng dụng của bạn bằng URL "tiếp theo" bạn đã cung cấp.

Trích xuất mã thông báo dùng một lần

Khi Google chuyển hướng trở lại ứng dụng của bạn, mã thông báo được nối vào URL "tiếp theo" dưới dạng tham số truy vấn. Trong ví dụ trên, sau khi người dùng đăng nhập, Google sẽ chuyển hướng đến một URL như http://www.example.com/RetrieveToken?token=DQAADKEDE. Ứng dụng của bạn sẽ trích xuất giá trị mã thông báo từ tham số truy vấn URL của ứng dụng.

Nếu ứng dụng của bạn đặt cookie xác thực trong trình duyệt của người dùng trước khi gửi cho hệ thống AuthSub, thì khi Google chuyển hướng trở lại URL "tiếp theo", ứng dụng của bạn có thể đọc cookie xác thực để nhận ra người dùng nào đã đến URL đó. Bạn có thể sử dụng cookie như vậy để liên kết mã nhận dạng khách hàng trong ứng dụng của bạn với mã thông báo AuthSub được lấy từ Google.

Thư viện ứng dụng cung cấp các phương thức thuận tiện để trích xuất mã thông báo sử dụng một lần:

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)

Nếu bạn đang sử dụng phương thức AuthSub an toàn, hãy nhớ đặt khóa riêng tư RSA để tạo 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)

Yêu cầu mã thông báo phiên

Mã thông báo bạn truy xuất từ URL luôn là mã sử dụng một lần. Bước tiếp theo là nâng cấp mã thông báo đó cho mã thông báo phiên tồn tại lâu bằng cách sử dụng URL AuthSubSessionToken, như được mô tả trong tài liệu đầy đủ về Xác thực AuthSub cho ứng dụng web. Nếu đang sử dụng AuthSub an toàn, bạn cần đặt khóa riêng tư RSA trước khi trao đổi. Dưới đây là một số ví dụ về cách sử dụng từng thư viện ứng dụng:

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

Đối với phương thức AuthSub an toàn, hãy truyền khoá riêng tư RSA đến exchangeForSessionToken thay vì dán 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

Đối với phương thức AuthSub an toàn, hãy truyền khoá riêng tư RSA đến exchangeForSessionToken thay vì dán 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

Đối với phương thức AuthSub an toàn, trước tiên, bạn phải thiết lập Zend_Gdata_HttpClient và đặt khoá riêng tư RSA bằng cách sử dụng 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

Lưu ý: Quy trình này giống như cho AuthSub, miễn là bạn đã sử dụng gdata.auth.extract_auth_sub_token_from_url(url, rsa_key=rsa_key) để trích xuất mã thông báo sử dụng một lần.

Lưu ý: Khi sử dụng AuthSub an toàn, chính khoá riêng tư của bạn sẽ không được gửi qua mạng. Thư viện ứng dụng gửi chữ ký duy nhất được tạo bằng cách ký yêu cầu bằng khoá của bạn, chứ không phải chính khoá đó.

Sử dụng mã thông báo phiên

Bạn có thể sử dụng mã thông báo phiên để xác thực yêu cầu đến máy chủ bằng cách đặt mã thông báo vào tiêu đề Uỷ quyền, như mô tả trong tài liệu về AuthSub.

Sau khi đặt mã thông báo phiên, bạn có thể sử dụng các lệnh gọi thư viện ứng dụng Google Data API tiêu chuẩn để tương tác với dịch vụ mà không phải suy nghĩ về mã thông báo. Để biết thông tin chi tiết, hãy xem tài liệu về thư viện ứng dụng và hướng dẫn dành cho nhà phát triển API Dữ liệu Google cho dịch vụ và ngôn ngữ mà bạn đang tương tác.

Truy xuất thông tin về mã thông báo phiên

Nếu muốn kiểm tra để máy khách và máy chủ đồng ý với các thông số của mã thông báo, thì bạn có thể chuyển mã thông báo đến trình xử lý AuthSubTokenInfo. Trình xử lý này sẽ trả về một tập hợp các cặp tên – giá trị chứa thông tin về mã thông báo.

Java

Map<String, String> tokenInfo = AuthSubUtil.getTokenInfo(sessionToken, null);

Nếu bạn đang sử dụng phương thức AuthSub an toàn, hãy truyền khoá riêng tư của RSA:

Map<String, String> tokenInfo = AuthSubUtil.getTokenInfo(sessionToken, privateKey);

.NET

Dictionary<String, String> tokenInfo = AuthSubUtil.GetTokenInfo(sessionToken, null);

Nếu bạn đang sử dụng phương thức AuthSub an toàn, hãy truyền khoá riêng tư của RSA:

Dictionary<String, String> tokenInfo = AuthSubUtil.GetTokenInfo(sessionToken, privateKey);

PHP

$tokenInfo = Zend_Gdata_AuthSub::getAuthSubTokenInfo($sessionToken);

Nếu bạn đang sử dụng phương thức AuthSub an toàn, hãy chuyển Zend_Gdata_HttpClient vào để yêu cầu được ký bằng khóa riêng tư RSA:

$tokenInfo = Zend_Gdata_AuthSub::getAuthSubTokenInfo($sessionToken, $client);

Python

token_info = calendar_service.AuthSubTokenInfo()

Thu hồi mã thông báo phiên

Mã thông báo phiên AuthSub không hết hạn; ứng dụng có thể lưu trữ mã thông báo phiên này trong thời gian cần thiết.

Do đó, khi dùng xong mã thông báo phiên, ứng dụng có thể thu hồi mã thông báo bằng trình xử lý AuthSubRevokeToken, như mô tả trong tài liệu AuthSub.

Ví dụ: nếu muốn quản lý mã thông báo theo cách giống như phiên truyền thống, thì ứng dụng của bạn có thể nhận mã thông báo ở đầu phiên hoạt động của người dùng và thu hồi mã thông báo đó vào cuối phiên hoạt động của người dùng.

Để thu hồi mã thông báo, hãy sử dụng các mã sau trong mỗi thư viện ứng dụng:

Java

AuthSubUtil.revokeToken(sessionToken, null);

Nếu bạn đang sử dụng phương thức AuthSub an toàn, hãy truyền khoá riêng tư của RSA:

AuthSubUtil.revokeToken(sessionToken, privateKey);

.NET

AuthSubUtil.revokeToken(sessionToken, null);

Nếu bạn đang sử dụng phương thức AuthSub an toàn, hãy truyền khoá riêng tư của RSA:

AuthSubUtil.revokeToken(sessionToken, privateKey);

PHP

$wasRevoked = Zend_Gdata_AuthSub::AuthSubRevokeToken($sessionToken);

Nếu bạn đang sử dụng phương thức AuthSub an toàn, hãy chuyển Zend_Gdata_HttpClient vào để yêu cầu được ký bằng khóa riêng tư RSA:

$wasRevoked = Zend_Gdata_AuthSub::AuthSubRevokeToken($sessionToken, $client);

Python

calendar_service.RevokeAuthSubToken()

Tài nguyên và mẫu khác

Trở lại đầu trang

Tạo khoá riêng tư tự ký và chứng chỉ công khai để sử dụng với AuthSub an toàn

Khoá riêng tư này dùng để tạo chữ ký và phải có trong mỗi yêu cầu. Google sẽ sử dụng khoá công khai được nhúng trong chứng chỉ để xác minh chữ ký đó. Khoá công khai phải là khoá RSA 1024 bit được mã hoá theo chứng chỉ X.509 ở định dạng PEM. Bạn phải gửi giấy chứng nhận cho Google tại thời điểm đăng ký.

Các phần sau đây cung cấp ví dụ về cách tạo khoá và chứng chỉ bằng hai công cụ cụ thể: tiện ích OpenSSL và tiện ích keytool của Java.

Các ví dụ này không dành riêng cho API Dữ liệu của Google; bạn có thể sử dụng cùng các tiện ích để tạo khoá cho bất kỳ mục đích nào.

Các ví dụ giả định rằng công ty của bạn có tên là My_Company và nằm ở Mountain View, California, Hoa Kỳ, với tên miền example.com.

Tạo khóa bằng OpenSSL

Để tạo một cặp khoá RSA và chứng chỉ tương ứng, bạn có thể dùng lệnh sau:

# 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

Cảnh báo: Việc bao gồm thông số -nodes sẽ tạo ra một khoá riêng tư không có mật khẩu để bảo vệ khoá đó. Tuy nhiên, bạn nên cân nhắc bỏ qua thông số này để tăng cường bảo mật.

Tham số -sha1 chỉ định khoá sẽ được dùng để tạo chữ ký SHA1.

Tham số -subj chỉ định danh tính của ứng dụng mà chứng chỉ đại diện.

Tham số -keyout chỉ định tệp sẽ chứa các khoá. Tệp này chứa thông tin nhạy cảm và phải được bảo vệ, không chia sẻ với bất kỳ ai.

Tham số -out chỉ định tệp sẽ chứa chứng chỉ ở định dạng PEM (có thể được gửi đến Google trong khi đăng ký).

Đang tạo khoá cho ứng dụng .NET

Khung .NET không hiểu được các khoá hoặc chứng chỉ được lưu trữ ở định dạng PEM. Do đó, bạn cần thực hiện thêm một bước nữa sau khi tạo tệp .pem:

openssl pkcs12 -export -in test_cert.pem -inkey myrsacert.pem -out myrsacert.pfx -name "Testing Certificate"

Bước này sẽ tạo một tệp PFX từ khoá riêng tư và chứng chỉ của bạn. Tệp này có thể được nhập vào thư viện ứng dụng .NET để ký các yêu cầu kỹ thuật số bằng API dữ liệu của Google.

Đang tạo khoá cho ứng dụng Java

Ứng dụng Java chấp nhận các khoá riêng tư ở định dạng PKCS#8. Sau khi tạo khóa/chứng chỉ theo hướng dẫn ở trên, hãy tạo tệp .pk8 từ tệp .pem bạn đã tạo:

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

Ngoài ra, bạn có thể sử dụng kho khoá Java và tiện ích keytool để tạo một cặp khoá RSA và chứng chỉ tương ứng. Hãy sử dụng lệnh sau:

# 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

Cảnh báo: "changeme" không phải là mật khẩu tốt; đây chỉ là một ví dụ.

Tham số -dname chỉ định danh tính của ứng dụng mà chứng chỉ đại diện. Tham số -storepass chỉ định mật khẩu để bảo vệ kho khoá. Tham số -keypass chỉ định mật khẩu để bảo vệ khoá riêng tư.

Để ghi chứng chỉ vào tệp có thể dùng trong công cụ ManageDomains, hãy sử dụng lệnh sau:

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

Trở lại đầu trang