Cara berbagi klien OAuth

Halaman ini menjelaskan cara berbagi klien OAuth dengan aplikasi lain dalam organisasi Anda.

Ringkasan

Berbagi klien OAuth antar-project akan menghilangkan kebutuhan untuk membuat klien OAuth baru secara manual untuk setiap aplikasi di bagian organisasi Anda. Setelah membuat satu klien OAuth secara manual, Anda dapat menetapkannya secara terprogram ke beberapa aplikasi.

Fitur berbagi klien OAuth juga digunakan untuk berbagi klien OAuth dengan agen jika Anda ingin dapat mengaktifkan Identity-Aware Proxy (IAP) tetapi tidak memiliki akses ke halaman Credentials.

Berbagi klien OAuth juga digunakan saat aplikasi menggunakan klien OAuth yang dikelola Google untuk alur browser dan Anda ingin mengaktifkan akses terprogram ke aplikasi.

Sebelum memulai

Buat klien OAuth baru dengan menyelesaikan langkah-langkah di pembuatan klien OAuth atau Anda dapat menggunakan klien OAuth yang sudah ada.

Akses terprogram

Bagian ini menjelaskan langkah-langkah guna mengaktifkan klien OAuth untuk akses terprogram ke aplikasi Anda.

  1. Izinkan klien OAuth untuk akses terprogram.

    Anda dapat mengizinkan daftar client ID OAuth yang dimiliki oleh organisasi dan ingin memberikan akses terprogram ke aplikasi.

    Anda dapat mengizinkan klien OAuth pada resource dan layanan di tingkat organisasi, project, dan folder.

    gcloud

    1. Jalankan perintah berikut untuk menyiapkan file SETTING_FILE. Perbarui nilainya sesuai kebutuhan.

        cat << EOF > SETTING_FILE
          access_settings:
            oauth_settings:
              programmatic_clients: ["clientId1", "clientId2", ..]
        EOF
      
    2. Gunakan perintah gcloud iap settings set untuk mengizinkan klien OAuth di tingkat yang diinginkan.

      gcloud iap settings set SETTING_FILE [--organization=ORGANIZATION --folder=FOLDER --project=/PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION
      

      Contoh perintah:

      Untuk mengizinkan client ID OAuth pada resource dalam organisasi, jalankan perintah berikut.

        gcloud iap settings set SETTING_FILE --organization=ORGANIZATION
        

      Untuk mengizinkan client ID OAuth pada resource dalam folder, jalankan perintah berikut.

        gcloud iap settings set SETTING_FILE --folder=FOLDER
        

      Untuk mengizinkan client ID OAuth di semua resource jenis web dalam project, jalankan perintah berikut.

        gcloud iap settings set SETTING_FILE --project=PROJECT --resource-type=iap_web
        

      Untuk mengizinkan client ID OAuth di layanan App Engine dalam project, jalankan perintah berikut.

        gcloud iap settings set SETTING_FILE --project=PROJECT --resource-type=app-engine --service=SERVICE
        

      Ganti kode berikut:

      • FOLDER: ID folder.
      • ORGANIZATION: ID organisasi.
      • PROJECT: Project ID.
      • RESOURCE_TYPE: Jenis resource IAP. Harus berupa app-engine, iap_web, compute, organization, atau folder.
      • SERVICE: Nama layanan. Hal ini opsional jika resource-type adalah compute atau app-engine.
      • VERSION: Nama versi. Hal ini tidak berlaku untuk compute, dan bersifat opsional jika resource-type adalah app-engine.

    API

    1. Jalankan perintah berikut untuk menyiapkan file iap_settings.json. Perbarui nilainya sesuai kebutuhan.

      cat << EOF > iap_settings.json
      {
        "access_settings": {
            "oauth_settings": {
                programmatic_clients: ["clientId1", "clientId2", ..]
              }
          }
      }
      EOF
      
    2. Dapatkan nama resource dengan menjalankan perintah gcloud iap settings get. Salin kolom nama dari output.
      Nama akan diperlukan pada langkah berikutnya.

      gcloud iap settings get [--organization=ORGANIZATION --folder=FOLDER --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE --version=VERSION]
      
    3. Ganti RESOURCE_NAME di perintah berikut dengan nama dari langkah sebelumnya. IapSettings akan diperbarui.

      curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d @iap_settings.json \
      "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.oauthSettings.programmaticClients"
      
  2. Login ke aplikasi menggunakan salah satu client ID OAuth yang diizinkan. Lihat Autentikasi terprogram.

Akses browser

Agar IAP dapat menggunakan client ID dan secret menggunakan konsol Google Cloud, selesaikan petunjuk berikut.

Risiko

Meskipun berbagi klien antar-aplikasi adalah hal yang mudah, tetap ada risikonya. Bagian ini menjelaskan potensi risiko saat berbagi klien dan cara memitigasinya.

Titik tunggal kegagalan

Menggunakan satu klien OAuth untuk banyak aplikasi akan menimbulkan satu titik kegagalan. Jika klien dihapus atau diubah dengan tidak benar, setiap aplikasi yang menggunakan klien tersebut akan terkena dampak.

Untuk memitigasinya, hanya bagikan klien saat memenuhi kasus penggunaan penting untuk klien bersama.

Kebocoran rahasia klien

Berbagi klien memerlukan pembagian rahasia klien Anda dengan orang dan skrip. Hal ini meningkatkan risiko kebocoran rahasia klien Anda. IAP tidak dapat membedakan antara token yang dibuat dari aplikasi Anda dan token yang dibuat dari rahasia klien yang bocor.

Akses ke resource IAP Anda dapat dipantau dengan Cloud Audit Logging. Jika Anda yakin ada kemungkinan rahasia klien Anda bocor, reset rahasia tersebut dari halaman Kredensial.

Untuk mengurangi risiko ini, lindungi rahasia klien seperti {i>password<i}. Batasi pembagiannya dan jangan pernah menyimpannya sebagai teks biasa.

Peniruan identitas pengguna yang diberi otorisasi

Jika rahasia klien Anda bocor, aplikasi berbahaya dapat menetapkan cookie browser autentikasi IAP pada domainnya untuk meniru identitas pengguna yang sah. Dengan cookie ini, IAP akan mengautentikasi pengguna yang ditiru identitasnya untuk semua aplikasi yang membagikan rahasia klien yang bocor.

Untuk mengurangi risiko ini, hindari berbagi klien antar-resource yang juga berbagi pengguna resmi. Tetapkan izin per resource untuk memastikan bahwa sekalipun pengguna yang ditiru identitasnya diautentikasi, IAP tidak akan mengizinkan akses.

Pengumpulan identitas pengguna

Jika rahasia klien Anda dibocorkan, aplikasi berbahaya dapat menggunakan client ID Anda untuk mengumpulkan identitas pengguna aplikasi Anda. Hal ini dipicu saat pengguna membuka aplikasi berbahaya.

Saat mengakses aplikasi yang dilindungi IAP untuk pertama kalinya, pengguna akan diminta untuk membagikan identitasnya ke aplikasi. Tindakan ini memberi pengguna kontrol atas informasi pribadi mereka. Jika pengguna setuju untuk membagikan identitasnya, sistem login Google akan mencatat izin tersebut. IAP tidak akan meminta ulang pengguna untuk permintaan berikutnya dari client ID mana pun dalam project yang sama.

Setiap pengguna yang telah setuju untuk membagikan identitasnya ke aplikasi Anda, dan yang mengunjungi aplikasi berbahaya tersebut, akan langsung dibagikan identitasnya tanpa persetujuan.