Autentikasi & Otorisasi

Cakupan Gmail API

Dokumen ini berisi informasi otorisasi dan autentikasi khusus Gmail API. Sebelum membaca dokumen ini, pastikan Anda membaca informasi autentikasi dan otorisasi umum Google Workspace di Mempelajari autentikasi dan otorisasi.

Mengonfigurasi OAuth 2.0 untuk otorisasi

Mengonfigurasi layar izin OAuth dan memilih cakupan untuk menentukan informasi yang ditampilkan kepada pengguna dan peninjau aplikasi, serta mendaftarkan aplikasi Anda agar dapat dipublikasikan nanti.

Cakupan Gmail API

Untuk menentukan tingkat akses yang diberikan ke aplikasi Anda, Anda perlu mengidentifikasi dan mendeklarasikan cakupan otorisasi. Cakupan otorisasi adalah string URI OAuth 2.0 yang berisi nama aplikasi Google Workspace, jenis data yang diakses, dan tingkat akses. Cakupan adalah permintaan aplikasi Anda untuk menggunakan data Google Workspace, termasuk data Akun Google pengguna.

Saat aplikasi Anda diinstal, pengguna akan diminta untuk memvalidasi cakupan yang digunakan oleh aplikasi. Secara umum, Anda harus memilih cakupan yang paling berfokus dan menghindari permintaan cakupan yang tidak diperlukan aplikasi Anda. Pengguna lebih bersedia memberikan akses ke cakupan terbatas yang dijelaskan dengan jelas.

Peringatan

Jika aplikasi publik Anda menggunakan cakupan yang mengizinkan akses ke data pengguna tertentu, aplikasi tersebut harus menyelesaikan proses verifikasi. Jika Anda melihat aplikasi belum diverifikasi di layar saat menguji aplikasi, Anda harus mengirimkan permintaan verifikasi untuk menghapusnya. Cari tahu lebih lanjut tentang aplikasi yang tidak diverifikasi dan dapatkan jawaban atas pertanyaan umum tentang verifikasi aplikasi di Pusat Bantuan.

Gmail API mendukung cakupan berikut:

Kode cakupan

Deskripsi

Penggunaan

https://www.googleapis.com/auth/ gmail.addons.current.action.compose

Mengelola draf dan mengirim email saat Anda berinteraksi dengan add-on.

Tidak sensitif

https://www.googleapis.com/auth/ gmail.addons.current.message.action

Melihat pesan email Anda saat Anda berinteraksi dengan add-on.

Tidak sensitif

https://www.googleapis.com/auth/ gmail.addons.current.message.metadata

Melihat metadata pesan email Anda saat add-on dijalankan.

Sensitif

https://www.googleapis.com/auth/ gmail.addons.current.message.readonly

Melihat pesan email Anda saat add-on sedang dijalankan.

Sensitif

https://www.googleapis.com/auth/ gmail.labels

Hanya membuat, membaca, memperbarui, dan menghapus label.

Tidak sensitif

https://www.googleapis.com/auth/ gmail.send

Hanya mengirim pesan. Tidak ada hak istimewa baca atau ubah pada kotak surat.

Sensitif

https://www.googleapis.com/auth/ gmail.readonly

Membaca semua resource dan metadatanya—tanpa operasi tulis.

Dibatasi

https://www.googleapis.com/auth/ gmail.compose

Membuat, membaca, memperbarui, dan menghapus draf. Mengirim pesan dan draf.

Dibatasi

https://www.googleapis.com/auth/ gmail.insert

Hanya menyisipkan dan mengimpor pesan.

Dibatasi

https://www.googleapis.com/auth/ gmail.modify

Semua operasi baca/tulis kecuali penghapusan langsung dan permanen rangkaian pesan dan pesan, dengan melewati Sampah.

Dibatasi

https://www.googleapis.com/auth/ gmail.metadata

Membaca metadata resource termasuk label, catatan histori, dan header pesan email, tetapi bukan isi pesan atau lampiran.

Dibatasi

https://www.googleapis.com/auth/ gmail.settings.basic

Mengelola setelan email dasar.

Dibatasi

https://www.googleapis.com/auth/ gmail.settings.sharing

Mengelola setelan email sensitif, termasuk aturan penerusan dan alias.

Catatan:Operasi yang dilindungi oleh cakupan ini dibatasi untuk penggunaan administratif saja. API ini hanya tersedia untuk pelanggan Google Workspace yang menggunakan akun layanan dengan delegasi tingkat domain.

Dibatasi

https://mail.google.com/

Akses penuh ke kotak surat akun, termasuk penghapusan permanen rangkaian pesan dan pesan Cakupan ini hanya boleh diminta jika aplikasi Anda perlu segera dan secara permanen menghapus rangkaian pesan dan pesan, melewati Sampah; semua tindakan lainnya dapat dilakukan dengan cakupan yang kurang permisif.

Dibatasi

Kolom Penggunaan dalam tabel di atas menunjukkan sensitivitas setiap cakupan, sesuai dengan definisi berikut:

  • Tidak sensitif —— Cakupan ini memberikan akses otorisasi terkecil dan hanya memerlukan verifikasi aplikasi dasar. Untuk mengetahui informasi tentang persyaratan ini, lihat Langkah-langkah untuk bersiap melakukan verifikasi.

  • Sensitif — Cakupan ini memungkinkan akses ke Data Pengguna Google dan memerlukan proses verifikasi cakupan sensitif. Untuk mengetahui informasi tentang persyaratan ini, lihat Layanan Google API: Kebijakan Data Pengguna. Cakupan ini tidak memerlukan penilaian keamanan.

  • Dibatasi — Cakupan ini memberikan akses luas ke Data Pengguna Google dan mengharuskan Anda menjalani proses verifikasi cakupan yang dibatasi. Untuk mengetahui informasi tentang persyaratan ini, lihat Layanan Google API: Kebijakan Data Pengguna dan Persyaratan Tambahan untuk Cakupan API Tertentu. Jika Anda menyimpan data cakupan terbatas di server (atau mengirimkannya), Anda harus menjalani penilaian keamanan.

Informasi tambahan yang mengatur penggunaan dan akses Anda ke Gmail API saat Anda meminta akses ke data pengguna dapat ditemukan di Kebijakan Data Pengguna dan Developer Layanan Gmail API.

Jika aplikasi Anda memerlukan akses ke Google API lainnya, Anda juga dapat menambahkan cakupan tersebut. Untuk mengetahui informasi selengkapnya tentang cakupan Google API, lihat Menggunakan OAuth 2.0 untuk Mengakses Google API.

Verifikasi OAuth

Penggunaan cakupan OAuth sensitif tertentu mungkin mengharuskan aplikasi Anda melalui proses verifikasi OAuth Google. Baca FAQ verifikasi OAuth untuk menentukan kapan aplikasi Anda harus melalui verifikasi dan jenis verifikasi yang diperlukan. Lihat juga Layanan Google API: Kebijakan Data Pengguna.

Mengimplementasikan otorisasi sisi server

Permintaan ke Gmail API harus diizinkan menggunakan kredensial OAuth 2.0. Anda harus menggunakan alur sisi server saat aplikasi Anda perlu mengakses Google API atas nama pengguna, misalnya saat pengguna offline. Pendekatan ini memerlukan penerusan kode otorisasi sekali pakai dari klien ke server Anda; kode ini digunakan untuk mendapatkan token akses dan token refresh untuk server Anda.

Untuk mempelajari lebih lanjut penerapan Google OAuth 2.0 sisi server, lihat Menggunakan OAuth 2.0 untuk Aplikasi Server Web.

Membuat client ID dan rahasia klien

Untuk mulai menggunakan Gmail API, pertama-tama Anda harus menggunakan alat penyiapan, yang memandu Anda menyelesaikan pembuatan project di Konsol Google API, mengaktifkan API, dan membuat kredensial.

  1. Dari halaman Credentials, klik Create credentials > OAuth client ID untuk membuat kredensial OAuth 2.0 atau Create credentials > Service account key untuk membuat akun layanan.

  2. Jika Anda membuat client ID OAuth, pilih jenis aplikasi Anda.

  3. Isi formulir, lalu klik Buat.

ID klien dan kunci akun layanan aplikasi Anda kini tercantum di halaman Credentials. Untuk mengetahui detailnya, klik ID klien; parameter bervariasi bergantung pada jenis ID, tetapi dapat mencakup alamat email, rahasia klien, asal JavaScript, atau URI pengalihan.

Catat ID Klien karena Anda harus menambahkannya ke kode nanti.

Menangani permintaan otorisasi

Saat pengguna memuat aplikasi Anda untuk pertama kalinya, mereka akan melihat dialog untuk memberikan izin kepada aplikasi Anda agar dapat mengakses akun Gmail mereka dengan cakupan izin yang diminta. Setelah otorisasi awal ini, pengguna hanya akan melihat dialog izin jika ID klien aplikasi Anda berubah atau cakupan yang diminta telah berubah.

Mengautentikasi pengguna

Login awal ini menampilkan objek hasil otorisasi yang berisi kode otorisasi jika berhasil.

Memberi otorisasi dengan kredensial tersimpan

Saat pengguna mengunjungi aplikasi Anda setelah alur otorisasi pertama yang berhasil, aplikasi Anda dapat menggunakan token refresh yang disimpan untuk mengotorisasi permintaan tanpa meminta pengguna lagi.

Jika Anda telah mengautentikasi pengguna, aplikasi Anda dapat mengambil token refresh dari databasenya dan menyimpan token di sesi sisi server. Jika token refresh dicabut atau tidak valid, Anda harus menangkapnya dan mengambil tindakan yang sesuai.

Menggunakan kredensial OAuth 2.0

Setelah kredensial OAuth 2.0 diambil seperti yang ditunjukkan di bagian sebelumnya, kredensial tersebut dapat digunakan untuk mengotorisasi objek layanan Gmail dan mengirim permintaan ke API.

Buat instance objek layanan

Contoh kode ini menunjukkan cara membuat instance objek layanan, lalu memberi otorisasi untuk membuat permintaan API.

from apiclient.discovery import build
# ...

def build_service(credentials):
  """Build a Gmail service object.

  Args:
    credentials: OAuth 2.0 credentials.

  Returns:
    Gmail service object.
  """
  http = httplib2.Http()
  http = credentials.authorize(http)
  return build('gmail', 'v1', http=http)

Mengirim permintaan yang sah dan memeriksa kredensial yang dicabut

Cuplikan kode berikut menggunakan instance layanan Gmail yang diotorisasi untuk mengambil daftar pesan.

Jika terjadi error, kode akan memeriksa kode status HTTP 401, yang harus ditangani dengan mengalihkan pengguna ke URL otorisasi.

Operasi Gmail API lainnya didokumentasikan dalam Referensi API.

from googleapiclient import errors

# ...

def ListMessages(service, user, query=''):
  """Gets a list of messages.

  Args:
    service: Authorized Gmail API service instance.
    user: The email address of the account.
    query: String used to filter messages returned.
          Eg.- 'label:UNREAD' for unread Messages only.

  Returns:
    List of messages that match the criteria of the query. Note that the
    returned list contains Message IDs, you must use get with the
    appropriate id to get the details of a Message.
  """
  try:
    response = service.users().messages().list(userId=user, q=query).execute()
    messages = []
    if 'messages' in response:
      messages.extend(response['messages'])

    while 'nextPageToken' in response:
      page_token = response['nextPageToken']
      response = service.users().messages().list(userId=user, q=query,
                                        pageToken=page_token).execute()
      if 'messages' in response:
        messages.extend(response['messages'])

    return messages
  except errors.HttpError as error:
    print('An error occurred: %s' % error)
    if error.resp.status == 401:
      # Credentials have been revoked.
      # TODO: Redirect the user to the authorization URL.
      raise NotImplementedError()

Langkah berikutnya

Setelah Anda merasa nyaman mengizinkan permintaan Gmail API, Anda siap mulai menangani pesan, rangkaian pesan, dan label, seperti yang dijelaskan di bagian Panduan Developer.

Anda dapat mempelajari lebih lanjut metode API yang tersedia di Referensi API.

Peringatan

Saat menguji aplikasi Anda selama pengembangan, pastikan untuk menggunakan akun Gmail pengujian yang tidak penting bagi Anda. Tindakan ini akan mencegah Anda secara tidak sengaja menyebabkan kekacauan pada email, rangkaian pesan, dan label Anda yang sebenarnya.