Peringatan: Halaman ini membahas API lama Google, yaitu Google Data API; halaman ini hanya relevan dengan API yang tercantum dalam direktori Google Data API, banyak di antaranya telah diganti dengan API yang lebih baru. Untuk informasi tentang API baru tertentu, lihat dokumentasi API baru. Untuk informasi tentang memberi otorisasi permintaan dengan API baru, lihat Autentikasi dan Otorisasi Akun Google.
Dokumen ini menjelaskan cara menggunakan library klien Google Data API untuk terhubung ke Autentikasi OAuth untuk Aplikasi Web Google.
Antarmuka OAuth memungkinkan aplikasi berbasis web mengakses layanan Google atas nama pengguna. Untuk mempertahankan tingkat keamanan yang tinggi, OAuth memungkinkan aplikasi mendapatkan token akses tanpa harus menangani informasi login akun pengguna.
Library klien Google Data API menyediakan metode untuk membantu Anda menggunakan OAuth di aplikasi web. Secara khusus, ada metode untuk membuat token permintaan, memberi otorisasi token permintaan, dan menukarkan token permintaan yang diotorisasi dengan token akses. Library ini juga menangani algoritme penandatanganan yang diperlukan saat membuat permintaan ke layanan Data Google.
Audiens
Dokumen ini ditujukan bagi programmer yang ingin agar aplikasi berbasis web mereka mengakses layanan Google atas nama pengguna, menggunakan library klien Google Data API.
Dokumen ini mengasumsikan bahwa Anda telah memahami antarmuka OAuth dan proses umum untuk memasukkan OAuth ke dalam aplikasi web. Untuk mengetahui deskripsi lengkap protokol OAuth, lihat Autentikasi OAuth untuk Aplikasi Web atau spesifikasi resmi di oauth.net.
Menggunakan 3-cab OAuth dan Google Data API tanpa library klien
Jika ingin aplikasi web Anda berinteraksi dengan layanan Data Google menggunakan OAuth sebagai metode otorisasi, semua yang perlu Anda ketahui ada di Autentikasi OAuth untuk Aplikasi Web. Anda tidak perlu menggunakan library klien Google Data API jika tidak menginginkannya.
Berikut adalah garis besar tentang cara aplikasi Anda mengautentikasi pengguna menggunakan OAuth:
- Aplikasi Anda membuat permintaan yang ditandatangani untuk mengambil token permintaan OAuth awal dari endpoint
OAuthRequestToken
. - Aplikasi Anda mengalihkan pengguna ke URL
OAuthAuthorizeToken
yang sesuai untuk memberi otorisasi token permintaan. - Setelah memberikan akses, pengguna akan dialihkan kembali ke aplikasi Anda (URL
oauth_callback
) - Aplikasi Anda mengirim permintaan yang ditandatangani untuk mengupgrade token permintaan yang diotorisasi ke token akses menggunakan endpoint
OAuthGetAccessToken
.
Library klien Google Data API menyederhanakan proses otorisasi ini dengan menangani berbagai detail untuk Anda. Dokumen ini menjelaskan caranya.
Mendaftarkan aplikasi web Anda
OAuth mewajibkan semua panggilan API ditandatangani secara digital. Google mendukung metode tanda tangan HMAC-SHA1
dan RSA-SHA1
. Untuk menandatangani permintaan, aplikasi Anda harus mendaftar ke Google terlebih dahulu. Setelah Anda mendaftar, Google akan memberi Anda kunci konsumen (dan rahasia untuk digunakan dengan HMAC-SHA1
), serta tempat untuk mengupload sertifikat publik.
1. Mendaftarkan domain Anda
Ikuti langkah-langkah yang dijelaskan dalam Pendaftaran untuk Aplikasi Berbasis Web.
2. Membuat pasangan kunci pribadi / sertifikat publik (opsional)
Jika Anda memilih menggunakan RSA-SHA1
sebagai oauth_signature_method
, Anda harus membuat pasangan kunci pribadi dan sertifikat publik RSA
. Lihat Membuat kunci pribadi dan sertifikat publik yang ditandatangani sendiri
(di bawah) untuk mengetahui contoh cara melakukannya.
Bekerja dengan OAuth 3 cabang dan Google Data API: contoh library klien
Bagian berikut menunjukkan contoh penggunaan metode library klien Google Data API untuk mengikuti langkah-langkah yang diuraikan di bagian
"Menggunakan OAuth" dalam dokumentasi OAuth. Semua contoh dalam dokumen ini mengasumsikan bahwa domain host aplikasi Anda adalah example.com
.
Menentukan cakupan akses data Anda
Setiap layanan Google menentukan nilai scope
yang menentukan akses token ke data pengguna. Nilai cakupan yang tersedia tercantum dalam FAQ Data Google. Misalnya, untuk menggunakan API Daftar Dokumen, tetapkan scope
ke https://docs.google.com/feeds/
, seperti yang tercantum dalam FAQ.
Catatan: Tetapkan nilai scope
ke URL paling sempit yang mengizinkan akses yang Anda perlukan. Tindakan ini mengurangi kemungkinan tidak sengaja mendapatkan dan membocorkan data pribadi. Misalnya, jika Anda ingin mengakses feed Daftar Dokumen pribadi pengguna saat ini, gunakan cakupan https://docs.google.com/feeds/default/private/full
, bukan cakupan yang lebih luas seperti https://docs.google.com/feeds/
, yang memberikan akses ke semua feed Daftar Dokumen.
Token multi-cakupan
Untuk membuat token yang mengakses beberapa Google Data API, pisahkan setiap cakupan dengan karakter spasi. Contoh di bawah membuat token dengan akses ke data Google Dokumen dan Google Kalender pengguna.
scope=https://www.google.com/calendar/feeds/ https://docs.google.com/feeds/
Encoding URL
Karakter non-ASCII yang muncul di URL, termasuk titik dua, garis miring, dan spasi, harus dienkodekan URL agar dapat dikirim melalui HTTP. Library klien Google Data API secara otomatis mengenkode parameter URL untuk Anda, sehingga Anda cukup menggunakan string berenkode non-URL saat menetapkan nilai ke parameter. Misalnya, Anda dapat membuat tugas berikut dalam kode Anda:
scope=https://www.google.com/calendar/feeds/ https://docs.google.com/feeds/
Saat Anda memanggil library klien, parameter
scope
akan otomatis dienkode ke URL dengan nilai berikut:
https%3a%2f%2fwww.google.com%2fcalendar%2ffeeds%2f+https%3a%2f%2fdocs.google.com%2ffeeds%2f
Mengambil token permintaan
Java
Untuk HMAC-SHA1
, Anda memerlukan beberapa cara untuk mempertahankan rahasia token (diperoleh dalam respons) untuk membuat objek token OAuth kembali dari halaman persetujuan. Untuk melakukannya, tetapkan variabel sesi atau cookie.
import com.google.gdata.client.docs.*; import com.google.gdata.client.authn.oauth.*; String CONSUMER_KEY = "example.com"; String CONSUMER_SECRET = "abc123doremi"; GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters(); oauthParameters.setOAuthConsumerKey(CONSUMER_KEY); oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET); oauthParameters.setScope("https://docs.google.com/feeds/"); oauthParameters.setOAuthCallback("http://www.example.com/UpgradeToken.jsp"); GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(new OAuthHmacSha1Signer()); oauthHelper.getUnauthorizedRequestToken(oauthParameters);
Dengan menggunakan RSA-SHA1
, oauth_token_secret
tidak digunakan sehingga tidak perlu menyimpan rahasia token.
import com.google.gdata.client.docs.*; import com.google.gdata.client.authn.oauth.*; String CONSUMER_KEY = "example.com"; GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters(); oauthParameters.setOAuthConsumerKey(CONSUMER_KEY); oauthParameters.setScope("https://docs.google.com/feeds/"); oauthParameters.setOAuthCallback("http://www.example.com/UpgradeToken.jsp"); PrivateKey privKey = getPrivateKey("/path/to/your/rsakey.pk8"); GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(new OAuthRsaSha1Signer(privKey)); oauthHelper.getUnauthorizedRequestToken(oauthParameters); ... public static PrivateKey getPrivateKey(String privKeyFileName) { File privKeyFile = new File(privKeyFileName); FileInputStream fis = new FileInputStream(privKeyFile); DataInputStream dis = new DataInputStream(fis); byte[] privKeyBytes = new byte[(int) privKeyFile.length()]; dis.read(privKeyBytes); dis.close(); fis.close(); String BEGIN = "-----BEGIN PRIVATE KEY-----"; String END = "-----END PRIVATE KEY-----"; String str = new String(privKeyBytes); if (str.contains(BEGIN) && str.contains(END)) { str = str.substring(BEGIN.length(), str.lastIndexOf(END)); } KeyFactory fac = KeyFactory.getInstance("RSA"); EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(Base64.decode(str)); return fac.generatePrivate(privKeySpec); }
PHP
Menggunakan HMAC-SHA1
sebagai metode tanda tangan:
require_once 'Zend/Oauth/Consumer.php'; session_start(); $CONSUMER_KEY = 'example.com'; $CONSUMER_SECRET = 'abc123doremi'; // Multi-scoped token. $SCOPES = array( 'https://docs.google.com/feeds/', 'https://spreadsheets.google.com/feeds/' ); $oauthOptions = array( 'requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER, 'version' => '1.0', 'consumerKey' => $CONSUMER_KEY, 'consumerSecret' => $CONSUMER_SECRET, 'signatureMethod' => 'HMAC-SHA1', 'callbackUrl' => 'http://myapp.example.com/access_token.php', 'requestTokenUrl' => 'https://www.google.com/accounts/OAuthGetRequestToken', 'userAuthorizationUrl' => 'https://www.google.com/accounts/OAuthAuthorizeToken', 'accessTokenUrl' => 'https://www.google.com/accounts/OAuthGetAccessToken' ); $consumer = new Zend_Oauth_Consumer($oauthOptions); // When using HMAC-SHA1, you need to persist the request token in some way. // This is because you'll need the request token's token secret when upgrading // to an access token later on. The example below saves the token object as a session variable. if (!isset($_SESSION['ACCESS_TOKEN'])) { $_SESSION['REQUEST_TOKEN'] = serialize($consumer->getRequestToken(array('scope' => implode(' ', $SCOPES)))); }
Menggunakan RSA-SHA1
sebagai metode tanda tangan:
require_once 'Zend/Crypt/Rsa/Key/Private.php'; require_once 'Zend/Oauth/Consumer.php'; session_start(); $CONSUMER_KEY = 'example.com'; $SCOPE = 'https://docs.google.com/feeds/'; $oauthOptions = array( 'requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER, 'version' => '1.0', 'consumerKey' => $CONSUMER_KEY, 'consumerSecret' => new Zend_Crypt_Rsa_Key_Private(file_get_contents(realpath('/path/to/yourRSAPrivateKey.pem'))), 'signatureMethod' => 'RSA-SHA1', 'callbackUrl' => 'http://myapp.example.com/access_token.php', 'requestTokenUrl' => 'https://www.google.com/accounts/OAuthGetRequestToken', 'userAuthorizationUrl' => 'https://www.google.com/accounts/OAuthAuthorizeToken', 'accessTokenUrl' => 'https://www.google.com/accounts/OAuthGetAccessToken' ); $consumer = new Zend_Oauth_Consumer($oauthOptions); if (!isset($_SESSION['ACCESS_TOKEN'])) { $_SESSION['REQUEST_TOKEN'] = serialize($consumer->getRequestToken(array('scope' => $SCOPE))); }
Python
Menggunakan HMAC-SHA1
sebagai metode tanda tangan:
Jika Anda menggunakan class v2.0+ yang lebih baru berdasarkan GDClient, gunakan:
import gdata.gauth import gdata.docs.client CONSUMER_KEY = 'example.com' CONSUMER_SECRET = 'abc123doremi' SCOPES = ['https://docs.google.com/feeds/', 'https://www.google.com/calendar/feeds/'] # example of a multi-scoped token client = gdata.docs.client.DocsClient(source='yourCompany-YourAppName-v1') oauth_callback_url = 'http://%s/get_access_token' % self.request.host request_token = client.GetOAuthToken( SCOPES, oauth_callback_url, CONSUMER_KEY, consumer_secret=CONSUMER_SECRET) # When using HMAC-SHA1, you need to persist the request_token in some way. # You'll need the token secret when upgrading to an access token later on. # In Google App Engine, you can use the AeSave helper: # gdata.gauth.AeSave(request_token, 'myKey')
Menggunakan RSA-SHA1
sebagai metode tanda tangan:
... f = open('/path/to/yourRSAPrivateKey.pem') RSA_KEY = f.read() f.close() request_token = client.GetOAuthToken(SCOPES, oauth_callback_url, CONSUMER_KEY, rsa_private_key=RSA_KEY)
Atau, jika Anda menggunakan class v1.0 yang lebih lama berdasarkan GDataService, panggilannya akan sedikit berbeda:
import gdata.auth import gdata.docs.service CONSUMER_KEY = 'example.com' CONSUMER_SECRET = 'abc123doremi' client = gdata.docs.service.DocsService(source='yourCompany-YourAppName-v1') client.SetOAuthInputParameters(gdata.auth.OAuthSignatureMethod.HMAC_SHA1, CONSUMER_KEY, consumer_secret=CONSUMER_SECRET) req_token = client.FetchOAuthRequestToken() client.SetOAuthToken(req_token)
Menggunakan RSA-SHA1
sebagai metode tanda tangan:
... f = open('/path/to/yourRSAPrivateKey.pem') RSA_KEY = f.read() f.close() client = gdata.docs.service.DocsService(source='yourCompany-YourAppName-v1') client.SetOAuthInputParameters(gdata.auth.OAuthSignatureMethod.RSA_SHA1, CONSUMER_KEY, rsa_key=RSA_KEY) SCOPES = ['https://docs.google.com/feeds/', 'https://www.google.com/calendar/feeds/'] # example of a multi-scoped token req_token = client.FetchOAuthRequestToken(scopes=SCOPES) client.SetOAuthToken(req_token)
.NET
Menggunakan HMAC-SHA1
sebagai metode tanda tangan:
using Google.GData.Client; string CONSUMER_KEY = "example.com"; string CONSUMER_SECRET = "abc123doremi"; // Multi-scoped token. string SCOPE = "https://www.google.com/calendar/feeds/ https://www.google.com/m8/feeds/"; OAuthParameters parameters = new OAuthParameters() { ConsumerKey = CONSUMER_KEY, ConsumerSecret = CONSUMER_SECRET, Scope = SCOPE, Callback = "http://myapp.example.com/access_token", SignatureMethod = "HMAC-SHA1" } OAuthUtil.GetUnauthorizedRequestToken(parameters);
Menggunakan RSA-SHA1
sebagai metode tanda tangan:
RSA-SHA1 is not supported yet.
Memberi otorisasi pada token permintaan
Untuk mengizinkan token permintaan, aplikasi Anda harus mengalihkan pengguna ke URL OAuthAuthorizeToken
, yang akan meminta mereka untuk login ke akun Google.
Untuk informasi selengkapnya tentang URL OAuthAuthorizeToken
, lihat
Autentikasi OAuth lengkap untuk Aplikasi Web.
Untuk membuat URL OAuthAuthorizeToken
di aplikasi Anda, gunakan hal berikut untuk setiap library klien. Perhatikan bahwa contoh ini dibuat berdasarkan contoh sebelumnya.
Setelah membuat URL halaman persetujuan, aplikasi Anda dapat menggunakannya dalam berbagai cara untuk mengarahkan pengguna ke pengendali OAuthAuthorizeToken
. Pendekatan yang paling umum adalah mengalihkan pengguna atau menampilkan link ke halaman tersebut.
Java
Untuk HMAC-SHA1
:
String approvalPageUrl = oauthHelper.createUserAuthorizationUrl(oauthParameters); System.out.println(approvalPageUrl);
Untuk RSA-SHA1
:
String approvalPageUrl = oauthHelper.createUserAuthorizationUrl(oauthParameters); System.out.println(approvalPageUrl);
PHP
// If on a G Suite domain, use your domain for the hd param (e.g. 'example.com'). $approvalUrl = $consumer->getRedirectUrl(array('hd' => 'default')); echo "<a href=\"$approvalUrl\">Grant access</a>";
Atau, Anda dapat mengalihkan ke URL persetujuan:
// If on a G Suite domain, use your domain for the hd param (e.g. 'example.com'). $consumer->redirect(array('hd' => 'default'));
Python
Jika Anda menggunakan class v2.0+ yang lebih baru berdasarkan GDClient, gunakan:
# req_token is from previous call to client.GetOAuthToken() domain = None # If on a G Suite domain, use your domain (e.g. 'example.com'). self.redirect(request_token.generate_authorization_url(google_apps_domain=domain))
Jika Anda menggunakan class v1.0 yang lebih lama berdasarkan GDataService, prosesnya akan sedikit berbeda.
# req_token is from previous call to client.FetchOAuthRequestToken() oauth_callback_url = 'http://%s/get_access_token' % self.request.host self.redirect(client.GenerateOAuthAuthorizationURL(callback_url=oauth_callback_url))
.NET
string authorizationUrl = OAuthUtil.CreateUserAuthorizationUrl(parameters); Console.WriteLine(authorizationUrl);
Mengekstrak token dari URL callback
Saat Google mengalihkan kembali ke aplikasi Anda, oauth_token
akan ditambahkan ke URL "oauth_callback_url
" sebagai parameter kueri.
Aplikasi Anda kemudian harus mengekstrak nilai token dari parameter kueri URL-nya dan menetapkan kembali parameter oauth.
Library klien menyediakan metode praktis untuk mengekstrak oauth_token
. Contoh ini dibuat berdasarkan contoh sebelumnya.
Java
Jika Anda memilih untuk mempertahankan rahasia token di URL callback (saat menggunakan HMAC-SHA1
):
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters(); oauthParameters.setOAuthConsumerKey(CONSUMER_KEY); oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET); GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(new OAuthHmacSha1Signer()); oauthHelper.getOAuthParametersFromCallback(request.getQueryString(), oauthParameters);
Satu-satunya perbedaan dengan RSA-SHA1
adalah metode penandatanganannya:
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters(); oauthParameters.setOAuthConsumerKey(CONSUMER_KEY); PrivateKey privKey = getPrivateKey("/path/to/your/rsakey.pk8"); GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(new OAuthRsaSha1Signer(privKey)); oauthHelper.getOAuthParametersFromCallback(request.getQueryString(), oauthParameters);
PHP
Langkah ini tidak diperlukan saat menggunakan library PHP.
Python
Jika Anda menggunakan class v2.0+ yang lebih baru berdasarkan GDClient, gunakan:
# Recall request_token. In Google App Engine, use AeLoad(): # saved_request_token = gdata.gauth.AeLoad('myKey') request_token = gdata.gauth.AuthorizeRequestToken(saved_request_token, self.request.uri)
Jika Anda menggunakan class v1.0 yang lebih lama berdasarkan GDataService, gunakan:
oauth_token = gdata.auth.OAuthTokenFromUrl(self.request.uri) if oauth_token: oauth_token.secret = # TODO: recall saved request_token and set the token secret here. oauth_token.oauth_input_params = gdata.auth.OAuthInputParams( gdata.auth.OAuthSignatureMethod.HMAC_SHA1, CONSUMER_KEY, consumer_secret=CONSUMER_SECRET) client.SetOAuthToken(oauth_token) else: print 'No oauth_token found in the URL'
Prosesnya mirip dengan RSA-SHA1
, tetapi tanpa rahasia token:
oauth_token = gdata.auth.OAuthTokenFromUrl(self.request.uri) if oauth_token: oauth_token.oauth_input_params = gdata.auth.OAuthInputParams( gdata.auth.OAuthSignatureMethod.RSA_SHA1, CONSUMER_KEY, rsa_key=RSA_KEY) client.SetOAuthToken(oauth_token) else: print 'No oauth_token found in the URL'
.NET
Jika Anda memilih untuk mempertahankan rahasia token di URL callback:
OAuthUtil.UpdateOAuthParametersFromCallback(url, parameters);
Mengupgrade ke token akses
Langkah terakhir dalam tarian token OAuth adalah mengupgrade token permintaan yang diotorisasi ke token akses yang berumur panjang menggunakan URL OAuthGetAccessToken
, seperti yang dijelaskan dalam dokumentasi Autentikasi OAuth untuk Aplikasi Web lengkap.
Berikut adalah beberapa contoh yang menggunakan setiap library klien:
Java
String accessToken = oauthHelper.getAccessToken(oauthParameters); // You can also pull the OAuth token string from the oauthParameters: // String accessToken = oauthParameters.getOAuthToken(); System.out.println("OAuth Access Token: " + accessToken); String accessTokenSecret = oauthParameters.getOAuthTokenSecret(); System.out.println("OAuth Access Token's Secret: " + accessTokenSecret);
PHP
if (!isset($_SESSION['ACCESS_TOKEN'])) { if (!empty($_GET) && isset($_SESSION['REQUEST_TOKEN'])) { $_SESSION['ACCESS_TOKEN'] = serialize($consumer->getAccessToken($_GET, unserialize($_SESSION['REQUEST_TOKEN']))); } }
Python
Jika Anda menggunakan class v2.0+ yang lebih baru berdasarkan GDClient, gunakan:
# Upgrade the token and save in the user's datastore access_token = client.GetAccessToken(request_token) # If you're using Google App Engine, you can call the AeSave() method to save # the access token under the current logged in user's account. #gdata.gauth.AeSave(access_token, token_key)
Jika Anda menggunakan class v1.0 yang lebih lama berdasarkan GDataService, gunakan:
access_token = client.UpgradeToOAuthAccessToken() # calls SetOAuthToken() for you
Jika Anda menggunakan gdata.gauth.AeSave()
di App Engine, token dan rahasia token akan disimpan untuk Anda di bawah pengguna yang login saat ini.
.NET
OAuthUtil.GetAccessToken(parameters); // If you want to extract the OAuth Token/TokenSecret from the OAuthParameters instance: string accessToken = parameter.Token; Console.WriteLine("OAuth Access Token: " + accessToken); string accessTokenSecret = parameter.TokenSecret; Console.WriteLine("OAuth Access Token's Secret: " + accessTokenSecret);
Catatan: Jika Anda menggunakan HMAC-SHA1
, pastikan untuk menyimpan rahasia token akses bersama dengan nilai token dalam database, jika tidak, Anda tidak akan dapat merekonstruksi parameter oauth dengan benar untuk digunakan nanti.
Menggunakan token akses
Setelah Anda memperoleh token akses, gunakan panggilan library klien Google Data API standar untuk berinteraksi dengan layanan. Library akan menangani penandatanganan permintaan dan menyertakan header Otorisasi yang benar untuk Anda. Biasanya, Anda akan menarik token pengguna dari cookie atau database. Contoh ini menunjukkan cara merekonstruksi parameter oauth dan membuat panggilan library klien.
Java
Jika Anda menggunakan HMAC-SHA1
:
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters(); oauthParameters.setOAuthConsumerKey(CONSUMER_KEY); oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET); oauthParameters.setOAuthToken(ACCESS_TOKEN); oauthParameters.setOAuthTokenSecret(TOKEN_SECRET); DocsService client = new DocsService("yourCompany-YourAppName-v1"); client.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer()); URL feedUrl = new URL("https://docs.google.com/feeds/default/private/full"); DocumentListFeed resultFeed = client.getFeed(feedUrl, DocumentListFeed.class); for (DocumentListEntry entry : resultFeed.getEntries()) { System.out.println(entry.getTitle().getPlainText()); }
Perbedaannya dengan RSA-SHA1
adalah Anda tidak perlu menetapkan rahasia token akses dan membuat objek penanda tangan berbeda:
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters(); oauthParameters.setOAuthConsumerKey(CONSUMER_KEY); oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET); oauthParameters.setOAuthToken(ACCESS_TOKEN); PrivateKey privKey = getPrivateKey("/path/to/your/rsakey.pk8"); // See above for the defintion of getPrivateKey() DocsService client = new DocsService("yourCompany-YourAppName-v1"); client.setOAuthCredentials(oauthParameters, new OAuthRsaSha1Signer(privKey)); URL feedUrl = new URL("https://docs.google.com/feeds/default/private/full"); DocumentListFeed resultFeed = client.getFeed(feedUrl, DocumentListFeed.class); for (DocumentListEntry entry : resultFeed.getEntries()) { System.out.println(entry.getTitle().getPlainText()); }
PHP
require_once 'Zend/Gdata/Docs.php'; if (isset($_SESSION['ACCESS_TOKEN'])) { $accessToken = unserialize($_SESSION['ACCESS_TOKEN']); } else { exit; } /* Or, you could set an existing token (say one stored from your database). For HMAC-SHA1: $accessToken = new Zend_Oauth_Token_Access(); $accessToken->setToken('1/AQfoI-qJDqkvvkf216Gc2g'); $accessToken->setTokenSecret('2c26GLW250tZiQ'); */ $httpClient = $accessToken->getHttpClient($oauthOptions); $client = new Zend_Gdata_Docs($httpClient, "yourCompany-YourAppName-v1"); // Retrieve user's list of Google Docs $feed = $client->getDocumentListFeed(); foreach ($feed->entries as $entry) { echo "$entry->title\n"; }
Python
Cuplikan ini mengasumsikan bahwa Anda telah mengambil token akses (menggunakan HMAC-SHA1
) dan menarik kembali kunci/rahasia token tersebut untuk digunakan nanti.
Jika Anda menggunakan class v2.0+ yang lebih baru berdasarkan GDClient, gunakan:
client = gdata.docs.client.DocsClient(source='yourCo-yourAppName-v1') client.auth_token = gdata.gauth.OAuthHmacToken(CONSUMER_KEY, CONSUMER_SECRET, TOKEN, TOKEN_SECRET, gdata.gauth.ACCESS_TOKEN) feed = client.GetDocList() for entry in feed.entry: print entry.title.text
Jika Anda menggunakan class v1.0 yang lebih lama berdasarkan GDataService, gunakan:
client = gdata.docs.service.DocsService(source='yourCompany-YourAppName-v1') client.SetOAuthInputParameters(SIG_METHOD, CONSUMER_KEY, consumer_secret=CONSUMER_SECRET) # the token key and secret should be recalled from your database client.SetOAuthToken(gdata.auth.OAuthToken(key=TOKEN, secret=TOKEN_SECRET)) feed = client.GetDocumentListFeed() for entry in feed.entry: print entry.title.text
.NET
Jika Anda menggunakan HMAC-SHA1
:
OAuthParameters parameters = new OAuthParameters() { ConsumerKey = CONSUMER_KEY, ConsumerSecret = CONSUMER_SECRET, Token = ACCESS_TOKEN, TokenSecret = TOKEN_SECRET } GOAuthRequestFactory requestFactory = new GOAuthRequestFactory("writely", APPLICATION_NAME, parameters); DocsService service = new DocsService(APPLICATION_NAME); service.RequestFactory = requestFactory; DocumentsListQuery query = new DocumentsListQuery(); DocumentsFeed feed = service.Query(query); foreach (DocumentEntry entry in feed.Entries) { Console.WriteLine(entry.Title.Text); }
Perbedaannya dengan RSA-SHA1
adalah Anda tidak perlu menetapkan rahasia token akses dan membuat objek penanda tangan berbeda:
RSA-SHA1 is not supported yet.
Referensi dan Referensi OAuth 3-Legged Tambahan
- Contoh OAuth di Blog Tips Google Data API
- Artikel: Menggunakan OAuth dengan Google Data API
- Contoh library klien Python
- Library klien Python Contoh Google App Engine
- Contoh library klien Java
- Library klien Java Contoh Google App Engine
- Contoh library klien PHP Zend
- Dokumentasi Autentikasi OAuth untuk Aplikasi Web
- Dokumentasi OAuth.net
2 OAuth Terpasang
OAuth 2 OAuth memungkinkan aplikasi tepercaya mengakses Data Google pengguna tanpa interaksi langsung mereka. Dua grup kunci dapat menggunakan OAuth berkaki dua:
Administrator domain G Suite: Administrator dapat membuat skrip dan aplikasi kustom yang mengelola data pengguna untuk domain mereka melalui Google Data API. Untuk mempelajari cara mengelola kunci dan rahasia yang terkait dengan domain G Suite Anda, dan memberikan kontrol akses global, lihat "Mengelola kunci dan rahasia OAuth".
Vendor software pihak ketiga: Vendor dapat menawarkan aplikasi yang menggunakan OAuth berkaki dua untuk berintegrasi dengan G Suite. Akses untuk aplikasi pihak ketiga dapat diberikan di halaman klien Manage API atau dengan menginstal dari G Suite Marketplace.
Token akses tidak diperlukan sesuai dengan alur otorisasi normal (juga disebut sebagai OAuth 3 cabang).
Contoh library klien berikut menunjukkan cara menyiapkan klien Anda untuk menggunakan 2 Legged OAuth menggunakan HMAC-SHA1
.
Java
import com.google.gdata.client.docs.*; import com.google.gdata.client.authn.oauth.*; String CONSUMER_KEY = "example.com"; String CONSUMER_SECRET = "abc123doremi"; GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters(); oauthParameters.setOAuthConsumerKey(CONSUMER_KEY); oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET); DocsService client = new DocsService("yourCompany-YourAppName-v1"); client.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer()); // Retrieve user's list of Google Docs String user = "any.user@anydomain.com"; URL feedUrl = new URL("https://docs.google.com/feeds/default/private/full" + "?xoauth_requestor_id=" + user); DocumentListFeed resultFeed = client.getFeed(feedUrl, DocumentListFeed.class); for (DocumentListEntry entry : resultFeed.getEntries()) { System.out.println(entry.getTitle().getPlainText()); }
PHP
require_once 'Zend/Oauth/Consumer.php'; require_once 'Zend/Gdata/Docs.php'; $CONSUMER_KEY = 'example.com'; $CONSUMER_SECRET = 'abc123doremi'; $USER = 'any.user@anydomain.com'; $oauthOptions = array( 'requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER, 'version' => '1.0', 'signatureMethod' => 'HMAC-SHA1', 'consumerKey' => $CONSUMER_KEY, 'consumerSecret' => $CONSUMER_SECRET ); $consumer = new Zend_Oauth_Consumer($oauthOptions); $token = new Zend_Oauth_Token_Access(); $httpClient = $token->getHttpClient($oauthOptions); $client = new Zend_Gdata_Docs($httpClient); // Retrieve user's list of Google Docs $feed = $client->getDocumentListFeed('https://docs.google.com/feeds/default/private/full?xoauth_requestor_id=' . urlencode($USER)); foreach ($feed->entries as $entry) { echo "$entry->title\n"; }
Python
Jika Anda menggunakan class v2.0+ yang lebih baru berdasarkan GDClient, gunakan:
import gdata.gauth import gdata.docs.client CONSUMER_KEY = 'example.com' CONSUMER_SECRET = 'abc123doremi' requestor_id = 'any.user@anydomain.com' client = gdata.docs.client.DocsClient(source='yourCompany-YourAppName-v1') client.auth_token = gdata.gauth.TwoLeggedOAuthHmacToken( CONSUMER_KEY, CONSUMER_SECRET, requestor_id) # Retrieve user's list of Google Docs feed = client.GetDocList() for entry in feed.entry: print entry.title.text
Jika Anda menggunakan class v1.0 yang lebih lama berdasarkan GDataService, gunakan:
import gdata.auth import gdata.docs.service CONSUMER_KEY = 'example.com' CONSUMER_SECRET = 'abc123doremi' SIG_METHOD = gdata.auth.OAuthSignatureMethod.HMAC_SHA1 requestor_id = 'any.user@anydomain.com' client = gdata.docs.service.DocsService(source='yourCompany-YourAppName-v1') client.SetOAuthInputParameters(SIG_METHOD, CONSUMER_KEY, consumer_secret=CONSUMER_SECRET, two_legged_oauth=True, requestor_id=requestor_id) # Retrieve user's list of Google Docs feed = client.GetDocumentListFeed() for entry in feed.entry: print entry.title.text # Change to another user on your domain client.GetOAuthInputParameters().requestor_id = 'another.user@example.com'
.NET
using Google.GData.Client; using Google.GData.Documents; // Create an OAuth factory to use GOAuthRequestFactory requestFactory = new GOAuthRequestFactory("writely", "yourCompany-YourAppName-v1"); requestFactory.ConsumerKey = "example.com"; requestFactory.ConsumerSecret = "abc123doremi"; String user = "any.user@anydomain.com"; DocumentsService client = new DocumentsService("yourCompany-YourAppName-v1"); client.RequestFactory = requestFactory; // Retrieve user's list of Google Docs DocumentsListQuery query = new DocumentsListQuery(); query.Uri = new OAuthUri("https://docs.google.com/feeds/default/private/full", user, requestFactory.ConsumerKey); DocumentsFeed feed = client.Query(query); foreach (DocumentEntry entry in feed.Entries) { Console.WriteLine(entry.Title.Text); }
Referensi dan Referensi OAuth 2-Legged Tambahan
- Contoh OAuth berkaki dua di Blog Tips Google Data API
- Library klien Java Contoh OAuth 2-Legged
- Library klien Python DuaLeggedOAuthExample (untuk class client.py) atau sampel 2_foot_oauth (untuk class service.py)
- Library klien .NET Contoh OAuth 2-Legged
- Dokumentasi OAuth berkaki 2
Membuat kunci pribadi dan sertifikat publik yang ditandatangani sendiri
Kunci pribadi digunakan untuk membuat tanda tangan, yang harus disertakan pada setiap permintaan. Kunci publik yang disematkan dalam sertifikat digunakan oleh Google untuk memverifikasi tanda tangan. Kunci publik harus berupa kunci RSA 1024-bit yang dienkode dalam sertifikat X.509 dalam format PEM. Sertifikat harus dikirimkan ke Google pada saat pendaftaran.
Bagian berikut memberikan contoh cara membuat kunci dan sertifikat menggunakan dua alat tertentu: utilitas OpenSSL
dan utilitas keytool
Java.
Contoh ini tidak khusus untuk Google Data API; Anda dapat menggunakan aplikasi utilitas yang sama untuk membuat kunci untuk tujuan apa pun.
Contoh ini mengasumsikan bahwa perusahaan Anda bernama My_Company, dan berlokasi di Mountain View, California, AS, dengan nama domain example.com.
Membuat kunci menggunakan OpenSSL
Untuk membuat pasangan kunci RSA dan sertifikat yang sesuai, Anda dapat menggunakan perintah berikut:
# 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
Peringatan: Menyertakan parameter -nodes
akan membuat kunci pribadi tanpa sandi untuk melindunginya.
Namun, Anda harus mempertimbangkan penghapusan parameter ini untuk keamanan tambahan.
Parameter -sha1
menentukan bahwa kunci tersebut akan digunakan untuk membuat tanda tangan SHA1.
Parameter -subj
menentukan identitas aplikasi yang diwakili oleh sertifikat.
Parameter -keyout
menentukan file yang akan berisi kunci.
File ini berisi informasi sensitif dan harus dilindungi serta tidak dibagikan kepada siapa pun.
Parameter -out
menentukan file yang akan berisi sertifikat dalam format PEM (yang dapat dikirim ke Google saat mendaftar).
Membuat kunci untuk klien .NET
Framework .NET tidak memahami kunci atau sertifikat yang disimpan dalam format PEM. Oleh karena itu, langkah tambahan diperlukan setelah Anda membuat file .pem:
openssl pkcs12 -export -in test_cert.pem -inkey myrsacert.pem -out myrsacert.pfx -name "Testing Certificate"
Langkah ini akan membuat file PFX dari kunci pribadi dan sertifikat Anda. File ini dapat diimpor ke library klien .NET untuk menandatangani permintaan yang dibuat ke Google Data API secara digital.
Membuat kunci untuk klien Java
Klien Java menerima kunci pribadi dalam format PKCS#8. Setelah membuat kunci/sertifikat menggunakan petunjuk di atas, buat file .pk8 dari file .pem yang dihasilkan:
openssl pkcs8 -in myrsakey.pem -topk8 -nocrypt -out myrsakey.pk8
Atau, Anda dapat menggunakan key store Java dan utilitas keytool untuk membuat sepasang kunci RSA dan sertifikat yang sesuai. Gunakan perintah berikut:
# 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
Peringatan: "changeme
" bukan sandi yang baik; ini hanyalah contoh.
Parameter -dname
menentukan identitas aplikasi yang diwakili oleh sertifikat. Parameter -storepass
menentukan sandi untuk melindungi keystore. Parameter -keypass
menentukan sandi untuk melindungi kunci pribadi.
Untuk menulis sertifikat ke file yang dapat digunakan di alat ManageDomains, gunakan perintah berikut:
# Output the public certificate to a file keytool -export -rfc -keystore ./Example.jks -storepass changeme \ -alias Example -file mycert.pem