คําเตือน: หน้านี้เกี่ยวกับ 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 ขอแนะนําให้คุณใช้โทเค็นที่ปลอดภัยเพื่อความปลอดภัยที่สูงขึ้น
วิธีลงทะเบียน
การเลือกการลงทะเบียนสําหรับแอปพลิเคชันบนเว็บจะทําให้แอปพลิเคชันของคุณได้รับประโยชน์ดังต่อไปนี้
- ระดับความปลอดภัยที่สูงขึ้น
- ได้รับความไว้วางใจจาก 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 anAuthSubToken
orSecureAuthSubToken
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 anAuthSubToken
orSecureAuthSubToken
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 Data API
- ตัวอย่าง AuthSub สําหรับไคลเอ็นต์ Python
- ตัวอย่างการตรวจสอบสิทธิ์ลูกค้าของไลบรารี Java
- บทความ: การใช้ AuthSub กับไลบรารีของไคลเอ็นต์ .NET
- บทความ: การใช้การตรวจสอบสิทธิ์ "AuthSub" กับไลบรารีของไคลเอ็นต์ JavaScript
การสร้างคีย์ส่วนตัวที่ลงนามด้วยตนเองและใบรับรองสาธารณะเพื่อใช้กับ 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