คำเตือน: หน้านี้เป็นข้อมูลเกี่ยวกับ API เก่าของ Google ซึ่งก็คือ Google Data API โดยเกี่ยวข้องกับ API ที่แสดงอยู่ในไดเรกทอรี Google Data API เท่านั้น ซึ่ง API หลายรายการถูกแทนที่ด้วย API ใหม่กว่าแล้ว ดูข้อมูลเกี่ยวกับ API ใหม่ที่เฉพาะเจาะจงได้ในเอกสารประกอบของ API ใหม่ ดูข้อมูลเกี่ยวกับการให้สิทธิ์คำขอด้วย API เวอร์ชันใหม่กว่าได้ที่การตรวจสอบสิทธิ์และการให้สิทธิ์บัญชี Google
เอกสารนี้อธิบายวิธีใช้ไลบรารีของไคลเอ็นต์ Google Data API เพื่อเชื่อมต่อกับการตรวจสอบสิทธิ์ AuthSub สำหรับเว็บแอปพลิเคชันของ 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 API โดยไม่มีไลบรารีของไคลเอ็นต์
หากต้องการให้ไคลเอ็นต์เว็บแอปพลิเคชันโต้ตอบกับบริการข้อมูลของ Google โดยใช้ AuthSub เป็นระบบการตรวจสอบสิทธิ์ ทุกสิ่งที่คุณจำเป็นต้องรู้จะอยู่ในการตรวจสอบสิทธิ์ AuthSub สำหรับเว็บแอปพลิเคชัน คุณไม่จำเป็นต้องใช้ไลบรารีของไคลเอ็นต์ Google Data API หากไม่ต้องการ
ต่อไปนี้คือโครงร่างของวิธีที่แอปพลิเคชันอาจตรวจสอบสิทธิ์ผู้ใช้โดยใช้ AuthSub
แอปพลิเคชันของคุณสร้าง URL ของ AuthSub ที่เหมาะสม แล้วส่งผู้ใช้ไปยัง URL นั้นเพื่อให้ผู้ใช้เข้าสู่ระบบได้ จากนั้นระบบ AuthSub จะส่งผู้ใช้กลับไปยัง URL ในเว็บไซต์ที่คุณระบุ และส่งคืนโทเค็นที่ใช้ได้ครั้งเดียว แอปพลิเคชันของคุณจะแลกเปลี่ยนโทเค็นนั้นเป็นโทเค็นเซสชันหรือไม่ก็ได้ จากนั้นแอปพลิเคชันจะส่งโทเค็นในส่วนหัวการให้สิทธิ์พร้อมกับคำขอแต่ละรายการที่แอปพลิเคชันส่งไปยังบริการ
ไลบรารีของไคลเอ็นต์ Google Data APIs ช่วยลดความซับซ้อนของกระบวนการให้สิทธิ์นี้ด้วยการจัดการรายละเอียดต่างๆ ให้คุณ เอกสารนี้จะอธิบายวิธีการ
การทำงานกับ AuthSub และ Google Data API: ตัวอย่างไลบรารีของไคลเอ็นต์
ส่วนนี้แสดงตัวอย่างการใช้วิธีการในไลบรารีของไคลเอ็นต์ 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 สามารถใช้ได้ใน 3 โหมด ได้แก่ ไม่ได้ลงทะเบียน ลงทะเบียนแล้ว และลงทะเบียนพร้อมการรักษาความปลอดภัยที่ดียิ่งขึ้น ส่วนที่เหลือของเอกสารนี้จะอ้างอิงถึงตัวเลือกสุดท้ายเป็น AuthSub ที่ปลอดภัย แม้ว่าโหมดที่ไม่ได้ลงทะเบียน/ลงทะเบียนจะตั้งค่าได้ง่ายกว่า AuthSub ที่ปลอดภัย แต่ Google ขอแนะนำให้คุณใช้โทเค็นที่ปลอดภัย เพื่อความปลอดภัยที่ดียิ่งขึ้น
วิธีลงทะเบียน
การเลือกการลงทะเบียนสำหรับแอปพลิเคชันบนเว็บจะทำให้แอปพลิเคชันของคุณได้รับประโยชน์ต่อไปนี้
- การรักษาความปลอดภัยในระดับที่สูงขึ้น
- ได้รับความไว้วางใจจาก Google (ไม่มีคำเตือนแสดงต่อผู้ใช้ในหน้าการให้สิทธิ์ของ Google)
AuthSub ที่ลงทะเบียนและปลอดภัย
หากเลือกใช้ AuthSub ที่ปลอดภัย คุณจะต้องสร้างคู่คีย์ส่วนตัว RSA แบบ Self-signed และใบรับรองสาธารณะนอกเหนือจากการลงทะเบียนเว็บแอปพลิเคชัน ดูตัวอย่างการสร้างใบรับรอง 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 การใช้ 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
(ดูข้อมูลเพิ่มเติมเกี่ยวกับ AuthSubRequest URL ได้ที่การตรวจสอบสิทธิ์ AuthSub สำหรับเว็บแอปพลิเคชันฉบับเต็ม)
หากต้องการสร้าง AuthSubRequest URL ในแอปพลิเคชัน ให้ใช้ข้อมูลต่อไปนี้สำหรับแต่ละไลบรารีไคลเอ็นต์
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 "ถัดไป" แล้ว แอปพลิเคชันจะใช้ 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 "next" ที่คุณระบุ
แยกโทเค็นแบบใช้ครั้งเดียว
เมื่อ Google เปลี่ยนเส้นทางกลับไปยังแอปพลิเคชันของคุณ ระบบจะเพิ่มโทเค็นต่อท้าย URL "next" เป็นพารามิเตอร์การค้นหา ในกรณีของตัวอย่าง
ข้างต้น หลังจากที่ผู้ใช้เข้าสู่ระบบแล้ว Google จะเปลี่ยนเส้นทางไปยัง URL เช่น http://www.example.com/RetrieveToken?token=DQAADKEDE
แอปพลิเคชันควรดึงค่าโทเค็นจากพารามิเตอร์การค้นหา URL
หากแอปพลิเคชันตั้งค่าคุกกี้การตรวจสอบสิทธิ์ในเบราว์เซอร์ของผู้ใช้ก่อนที่จะส่งไปยังระบบ AuthSub เมื่อ Google เปลี่ยนเส้นทางกลับไปยัง URL "next" แอปพลิเคชันจะอ่านคุกกี้การตรวจสอบสิทธิ์เพื่อระบุว่าผู้ใช้รายใดมาที่ 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 anAuthSubTokenorSecureAuthSubTokenobject. # 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 anAuthSubTokenorSecureAuthSubTokenobject. # 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 จะเป็นโทเค็นแบบใช้ครั้งเดียวเสมอ ขั้นตอนถัดไปคือการอัปเกรดโทเค็นดังกล่าวเป็นโทเค็นเซสชันที่มีอายุยาวนานโดยใช้ AuthSubSessionToken URL ตามที่อธิบายไว้
ในเอกสารประกอบฉบับเต็มของการตรวจสอบสิทธิ์ 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 สำหรับบริการและภาษาที่คุณใช้
การเรียกข้อมูลเกี่ยวกับโทเค็นเซสชัน
หากต้องการทดสอบว่าไคลเอ็นต์และเซิร์ฟเวอร์เห็นพ้องต้องกันเกี่ยวกับพารามิเตอร์ของโทเค็นหรือไม่ คุณสามารถส่งโทเค็นไปยัง
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 Data API
- ไลบรารีของไคลเอ็นต์ Python ตัวอย่าง AuthSub
- ตัวอย่าง AuthSub ของไลบรารีของไคลเอ็นต์ Java
- บทความ: การใช้ AuthSub กับไลบรารีของไคลเอ็นต์ .NET
- บทความ: การใช้การตรวจสอบสิทธิ์ "AuthSub" กับไลบรารีของไคลเอ็นต์ JavaScript
การสร้างคีย์ส่วนตัวแบบ Self-Signing และใบรับรองสาธารณะเพื่อใช้กับ AuthSub ที่ปลอดภัย
ระบบใช้คีย์ส่วนตัวเพื่อสร้างลายเซ็น ซึ่งต้องรวมไว้กับคำขอแต่ละรายการ Google ใช้คีย์สาธารณะที่ฝังอยู่ในใบรับรองเพื่อยืนยันลายเซ็น คีย์สาธารณะต้องเป็นคีย์ RSA ขนาด 1024 บิตที่เข้ารหัสในใบรับรอง X.509 ในรูปแบบ PEM คุณควรส่งใบรับรองให้ Google ในเวลาที่ลงทะเบียน
ส่วนต่อไปนี้จะแสดงตัวอย่างวิธีสร้างคีย์และใบรับรองโดยใช้เครื่องมือ 2 อย่าง ได้แก่ ยูทิลิตี OpenSSL และยูทิลิตี keytool ของ Java
ตัวอย่างเหล่านี้ไม่ได้เจาะจงสำหรับ Google Data API คุณสามารถใช้ยูทิลิตีเดียวกันเพื่อสร้างคีย์สำหรับวัตถุประสงค์ใดก็ได้
ตัวอย่างนี้ถือว่าบริษัทของคุณชื่อ My_Company ตั้งอยู่ที่ Mountain View รัฐแคลิฟอร์เนีย สหรัฐอเมริกา และมีชื่อโดเมนเป็น 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 Data API แบบดิจิทัล
สร้างคีย์สำหรับไคลเอ็นต์ Java
ไคลเอ็นต์ Java ยอมรับคีย์ส่วนตัวในรูปแบบ PKCS#8 หลังจากสร้างคีย์/ใบรับรองโดยใช้วิธีการด้านบนแล้ว ให้สร้างไฟล์ .pk8 จากไฟล์ .pem ที่สร้างขึ้น
openssl pkcs8 -in myrsakey.pem -topk8 -nocrypt -out myrsakey.pk8
หรือคุณจะใช้ที่เก็บคีย์ Java และยูทิลิตี 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