AuthSub ในไลบรารีของไคลเอ็นต์โปรโตคอลข้อมูล Google

คําเตือน: หน้านี้เกี่ยวกับ API แบบเก่าของ Google ซึ่งก็คือ Google Data API โดยเกี่ยวข้องกับ API ที่แสดงอยู่ในไดเรกทอรี Google Data API เท่านั้น โดยหลาย API ถูกแทนที่ด้วย API ที่ใหม่กว่า สําหรับข้อมูลเกี่ยวกับ API ใหม่โดยเฉพาะ โปรดดูเอกสารประกอบของ API ใหม่ ดูข้อมูลเกี่ยวกับการให้สิทธิ์คําขอด้วย API ใหม่ได้ที่การตรวจสอบสิทธิ์และการให้สิทธิ์บัญชี Google

เอกสารนี้อธิบายวิธีใช้ไลบรารีของไคลเอ็นต์ Google Data API เพื่อเชื่อมต่อกับ AuthSub Authentication for Web Application ของ Google

อินเทอร์เฟซ AuthSub ช่วยให้แอปพลิเคชันบนเว็บเข้าถึงบริการของ Google ในนามของผู้ใช้ได้ เพื่อรักษาการรักษาความปลอดภัยในระดับสูง อินเทอร์เฟซ AuthSub จะช่วยให้แอปพลิเคชันรับโทเค็นการตรวจสอบสิทธิ์ได้โดยไม่ต้องจัดการข้อมูลเข้าสู่ระบบบัญชีของผู้ใช้

ไลบรารีของไคลเอ็นต์ Google Data API มอบวิธีต่างๆ ที่จะช่วยให้คุณใช้ AuthSub ในเว็บแอปพลิเคชันได้ กล่าวคือ วิธีสร้าง URL คําขอ การได้โทเค็นการตรวจสอบสิทธิ์แบบใช้ครั้งเดียว การแลกเปลี่ยนโทเค็นแบบใช้ครั้งเดียวสําหรับโทเค็นเซสชัน และการรับรองคําขอ

หมายเหตุ: ไลบรารีของไคลเอ็นต์ JavaScript มีรสชาติของ AuthSub ของตัวเอง ซึ่งเรียกว่า AuthSubJS สําหรับข้อมูลเกี่ยวกับวิธีใช้ AuthSubJS ในแอปพลิเคชัน JavaScript ของคุณ โปรดดูการใช้การตรวจสอบสิทธิ์ "AuthSub" กับไลบรารีของไคลเอ็นต์ JavaScript

ผู้ชม

เอกสารนี้มีไว้สําหรับโปรแกรมเมอร์ที่ต้องการแอปพลิเคชันบนเว็บเพื่อเข้าถึงบริการของ Google ในนามของผู้ใช้โดยใช้ไลบรารีของไคลเอ็นต์ Google Data API

เอกสารนี้จะถือว่าคุณคุ้นเคยกับอินเทอร์เฟซ AuthSub และกระบวนการทั่วไปในการรวม AuthSub เข้ากับเว็บแอปพลิเคชัน โปรดดูคําอธิบายโปรโตคอลทั้งหมดของ AuthSub ที่หัวข้อการตรวจสอบสิทธิ์ AuthSub สําหรับเว็บแอปพลิเคชัน

การใช้ AuthSub และ Google Data API โดยไม่มีไลบรารีของไคลเอ็นต์

หากต้องการให้ไคลเอ็นต์เว็บแอปพลิเคชันโต้ตอบกับบริการข้อมูลของ Google โดยใช้ AuthSub เป็นระบบการตรวจสอบสิทธิ์ ทุกสิ่งที่คุณจําเป็นต้องทราบจริงๆ จะอยู่ในการตรวจสอบสิทธิ์ AuthSub สําหรับเว็บแอปพลิเคชัน คุณไม่จําเป็นต้องใช้ไลบรารีของไคลเอ็นต์ Google Data API หากไม่ต้องการ

โครงร่างวิธีที่แอปพลิเคชันอาจตรวจสอบสิทธิ์ผู้ใช้โดยใช้ AuthSub มีดังนี้

แอปพลิเคชันจะสร้าง URL AuthSub ที่เหมาะสมแล้วส่งผู้ใช้ไปยัง URL นั้นเพื่อเข้าสู่ระบบ ระบบ AuthSub จะส่งผู้ใช้กลับไปยัง URL ในเว็บไซต์ที่คุณระบุ และแสดงผลโทเค็นแบบใช้ครั้งเดียว แอปพลิเคชันของคุณจะเลือกแลกเปลี่ยนโทเค็นนั้นสําหรับโทเค็นเซสชัน จากนั้นแอปพลิเคชันจะส่งโทเค็นในส่วนหัวการให้สิทธิ์กับคําขอแต่ละรายการที่แอปพลิเคชันส่งไปยังบริการ

ไลบรารีของไคลเอ็นต์ Google Data API ช่วยให้กระบวนการให้สิทธิ์นี้ง่ายขึ้นด้วยการจัดการรายละเอียดต่างๆ ให้คุณ เอกสารนี้อธิบายวิธีการ

การทํางานกับ AuthSub และ Google Data API: ตัวอย่างไลบรารีของไคลเอ็นต์

ส่วนนี้จะแสดงตัวอย่างการใช้เมธอดไลบรารีของไคลเอ็นต์ Google Data API เพื่อทําตามขั้นตอนที่ระบุไว้ในส่วน "การทํางานกับ AuthSub" ในเอกสารประกอบ AuthSub

ในตัวอย่างนี้ เราจะผสานรวมอินเทอร์เฟซ AuthSub เข้ากับเว็บแอปพลิเคชันที่โต้ตอบกับ Google ปฏิทิน (แม้ว่าคุณจะไม่จําเป็นต้องรู้เกี่ยวกับ Google ปฏิทินเพื่อดําเนินการตามตัวอย่างดังกล่าวก็ตาม) ตัวอย่างจะถือว่าเว็บแอปพลิเคชันโฮสต์ไว้ที่ example.com

เลือกประเภทโทเค็นที่จะใช้ (session=0 หรือ session=1)

คุณจะเลือกใช้โทเค็นแบบใช้ครั้งเดียว (session=0) หรือโทเค็นเซสชัน (session=1) ได้ เอกสารนี้จะใช้โทเค็นเซสชันเนื่องจากมีประโยชน์มากกว่าในแอปพลิเคชันที่จะทําคําขอ API หลายรายการ ตามที่ได้กล่าวไว้ในเอกสารประกอบ AuthSub หากคุณตัดสินใจใช้โทเค็นเซสชันในเว็บแอปพลิเคชัน คุณจะต้องจัดการพื้นที่เก็บโทเค็นด้วยตนเอง เอกสารนี้ไม่ครอบคลุมการจัดการโทเค็น และโปรดทราบว่าโทเค็นที่ขอด้วย session=0 จะแลกเปลี่ยน (อัปเกรด) กับโทเค็นเซสชันที่มีอายุการใช้งานในภายหลังไม่ได้

เลือกว่าจะลงทะเบียนเว็บแอปพลิเคชัน (secure=0 หรือ secure=1)

AuthSub สามารถใช้ได้ใน 3 โหมดที่แตกต่างกัน ได้แก่ ยกเลิกการลงทะเบียน ลงทะเบียน และลงทะเบียนด้วยความปลอดภัยขั้นสูง ส่วนที่เหลือของเอกสารนี้จะเรียกว่าตัวเลือกสุดท้ายเป็น AuthSub ที่ปลอดภัย แม้ว่าโหมดที่ไม่ได้ลงทะเบียน/ลงทะเบียนจะง่ายกว่าการตั้งค่า AuthSub ที่ปลอดภัย แต่ Google ขอแนะนําให้คุณใช้โทเค็นที่ปลอดภัยเพื่อความปลอดภัยที่สูงขึ้น

วิธีลงทะเบียน

การเลือกการลงทะเบียนสําหรับแอปพลิเคชันบนเว็บจะทําให้แอปพลิเคชันของคุณได้รับประโยชน์ดังต่อไปนี้

  1. ระดับความปลอดภัยที่สูงขึ้น
  2. ได้รับความไว้วางใจจาก Google (ไม่มีการแสดงคําเตือนต่อผู้ใช้ในหน้าการให้สิทธิ์ของ Google)

จดทะเบียนแล้ว + การตรวจสอบสิทธิ์ย่อยที่ปลอดภัย

หากคุณตัดสินใจใช้ AuthSub ที่ปลอดภัย คุณจะต้องสร้างคีย์ส่วนตัว RSA ที่มีการรับรองด้วยตนเองและคู่ใบรับรองสาธารณะนอกเหนือจากการลงทะเบียนเว็บแอปพลิเคชันของคุณ ดูการสร้างคีย์และใบรับรองเพื่อใช้กับโหมดที่ลงทะเบียน (ด้านล่าง) เพื่อดูตัวอย่างการสร้างใบรับรอง X.509

กําหนดขอบเขตของการเข้าถึงข้อมูล

บริการแต่ละรายการของ Google กําหนดค่า scope ที่กําหนดสิทธิ์เข้าถึงของโทเค็น (และอาจจํากัด) ของข้อมูลของผู้ใช้ โปรดดูคําถามที่พบบ่อยสําหรับรายการค่า scope ที่ใช้ได้

เนื่องจากเราตัดสินใจโต้ตอบกับ Google ปฏิทิน 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/ จะอนุญาตให้เข้าถึงฟีดทั้งหมดของปฏิทิน: http://www.google.com/calendar/feeds/*

โทเค็นที่มีหลายขอบเขต

หากต้องการสร้างโทเค็นที่เข้าถึง Google Data API หลายรายการ ให้แยกแต่ละขอบเขตด้วยพื้นที่ที่เข้ารหัส URL ตัวอย่างด้านล่างเป็นการสร้างโทเค็นที่จะมีสิทธิ์เข้าถึงทั้งข้อมูล Google Contacts และ 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 วิธีที่ใช้บ่อยที่สุดคือแสดงหน้าเว็บที่แจ้งให้ผู้ใช้ทราบว่าจําเป็นต้องเปิดลิงก์เพื่อให้สิทธิ์แอปพลิเคชันในการเข้าถึงบัญชี 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

ไลบรารีของไคลเอ็นต์มีวิธีการที่สะดวกสําหรับการแยกโทเค็นแบบใช้ครั้งเดียว ดังนี้

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 Application หากใช้ 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 ที่ปลอดภัย ระบบจะไม่ส่งคีย์ส่วนตัวของคุณผ่านเครือข่าย ไลบรารีของไคลเอ็นต์จะส่งลายเซ็นที่ไม่ซ้ํากันที่สร้างขึ้นโดยการลงนามคําขอด้วยคีย์ของคุณ ไม่ใช่ตัวคีย์

ใช้โทเค็นเซสชัน

คุณสามารถใช้โทเค็นเซสชันเพื่อตรวจสอบสิทธิ์คําขอไปยังเซิร์ฟเวอร์โดยวางโทเค็นในส่วนหัวการให้สิทธิ์ตามที่อธิบายไว้ในเอกสารประกอบ AuthSub

หลังจากตั้งค่าโทเค็นเซสชันแล้ว คุณสามารถใช้การเรียกไลบรารีของไคลเอ็นต์ Google Data API มาตรฐานเพื่อโต้ตอบกับบริการโดยไม่ต้องคํานึงถึงโทเค็น โปรดดูรายละเอียดในเอกสารคู่มือของไคลเอ็นต์และคู่มือสําหรับนักพัฒนาซอฟต์แวร์ Google Data API สําหรับบริการและภาษาที่คุณกําลังโต้ตอบ

กําลังดึงข้อมูลเกี่ยวกับโทเค็นเซสชัน

หากต้องการทดสอบว่าไคลเอ็นต์และเซิร์ฟเวอร์ยอมรับพารามิเตอร์ของโทเค็น คุณจะส่งโทเค็นไปยังเครื่องจัดการ 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 ในขณะที่ลงทะเบียน

ส่วนต่อไปนี้จะมีตัวอย่างวิธีสร้างคีย์และใบรับรองโดยใช้เครื่องมือ 2 อย่าง ได้แก่ ยูทิลิตี OpenSSL และยูทิลิตี keytool ของ Java

ตัวอย่างเหล่านี้ไม่ได้เจาะจงสําหรับ Google Data API คุณสามารถใช้ยูทิลิตีเดียวกันเพื่อสร้างคีย์เพื่อวัตถุประสงค์ใดๆ

ตัวอย่างจะถือว่าบริษัทของคุณมีชื่อว่า My_Company และตั้งอยู่ในเมาน์เทนวิว รัฐแคลิฟอร์เนีย สหรัฐอเมริกา โดยมีชื่อโดเมน example.com

การสร้างคีย์โดยใช้ OpenSSL

หากต้องการสร้างคีย์ RSA 1 คู่และใบรับรองที่เกี่ยวข้อง 1 รายการ ให้ใช้คําสั่งต่อไปนี้

# 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 API ได้

กําลังสร้างคีย์สําหรับไคลเอ็นต์ Java

ไคลเอ็นต์ Java ยอมรับคีย์ส่วนตัวในรูปแบบ PKCS#8 หลังจากสร้างคีย์/ใบรับรองโดยใช้คําแนะนําด้านบน ให้สร้างไฟล์ .pk8 จากไฟล์ .pem ที่คุณสร้าง

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

หรือคุณจะใช้ Java Key Store และยูทิลิตีเครื่องมือคีย์เพื่อสร้างคีย์ RSA 1 คู่และใบรับรองที่เกี่ยวข้อง ใช้คําสั่งต่อไปนี้

# 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

กลับไปด้านบน