Tuesday, October 16, 2012

Menggunakan OAuth 2.0 Service Account untuk mengakses Google APIs

Berawal dari dokumentasi Google mengenai OAuth 2.0 yang ditujukan untuk aplikasi yang berupa Service account. Perbedaan utama dari OAuth model lainnya adalah, tidak dibutuhkannya masing-masing User untuk melakukan process Authorize. Proses Authorize itu sendiri digantikan dengan suatu Permission yang di configure disisi Control Panel.
Model OAuth 2.0 Service Account ini sangat pas apabila digunakan untuk Program yang berjalan terus-menerus (service) atau aplikasi yang berjalan di background, yang mebutuhkan akses ke semua User dalam satu domain Google Apps.

Membuat OAuth 2.0 Client ID

  1. Kita buat OAuth project dari console API. Apabila belum pernah membuat project sebelumnya, akan disodorkan menu untuk membuat Project. Klik menu Create OAuth Project. Apabila sudah pernah membuat Project sebelumnya, pilih pada drop-down list Porject, pilih Create...
  2. Klik menu API Access, kemudian klik Create an OAuth 2.0 client ID. Isi informasi umum seputar Project ini (terserah), yang harus diperhatikan adalah pada Application Type, pilih Service account.
  3. Setelah itu akan muncul dialog untuk Download Private Key. Nanti kita akan gunakan Private Key ini.
  4. Hasilnya sebagai berikut. Catat Client ID dan Email Address juga.

Mulai Beraksi!


Dalam contoh ini saya menggunakan bahasa Python yang memang favorit saya, meskipun bukan expertise saya (setidaknya ketika saya menulis ini). Selain itu juga saya ambil contoh kasus dalam mengakses Google Drive API dari user-user lain termasuk dalam domain Google App kita.
  1. Proses Authorization
    #function untuk ambil content file Private Key 
    def datafile(filename):
      f = open(os.path.join(os.path.dirname(__file__), 'data', filename), 'rb')
      data = f.read()
      f.close()
      return data
    
    
    class OAuth2Service():
    #generate credential
      def _generate_credential(self):
        private_key = datafile(CLIENT_PRIV_KEY)
        self.cred = SignedJwtAssertionCredentials(
            'xxxxxxxxxxxx@developer.gserviceaccount.com', #email address dari API Console
            private_key,
            scope=OAUTH_SCOPE,
            prn='otheruser@yourdomain.com')
    
    #main function
    if __name__ == '__main__':
      app = Server2DriveSync()
      app._generate_credential()
      #do the action (next section)
    
  2. Mulai mengakses Google Drive API
    class OAuth2Service():
    #...
      def test_create_file(self):
        # Create an httplib2.Http object and authorize it with our credentials
        http = httplib2.Http()
        http = self.cred.authorize(http)
    
        drive_service = build('drive', 'v2', http=http)
    
        # Insert a file
        media_body = MediaFileUpload('test_file.txt', mimetype='text/plain', resumable=True)
        body = {
          'title': 'test_file.txt',
          'description': 'A test document',
          'mimeType': 'text/plain'
        }
    
        file = drive_service.files().insert(body=body, media_body=media_body).execute()
        pprint.pprint(file)
    
    
Download full source code: http://goo.gl/6I20I

Beri Permission untuk Project Ini


  1. Untuk menberi akses, silahkan Login ke Control Panel Google Apps, kemudian akses menu Advanced Tools > Manage OAuth domain key
  2. Akses menu  Manage client API access, kemudian masukkan Client ID yang sudah kita buat pada API Console diatas. Pada One or More API scope(s) isi dengan Google Drive Scope: https://www.googleapis.com/auth/drive
  3. Klik Authorize
Untuk informasi selengkapnya bisa refer ke referensi Google.

Dengan model OAuth ini, setidaknya kita bisa membuat Program seperti berikut:

  • Sinkronisasi Google Drive dengan File Server local
  • Tool migrasi file-file dari File Server yang terpusat ke Google Drive
Semoga bermanfaat!

No comments:

Post a Comment