Menggunakan akun layanan dengan identitas eksternal

Artikel ini menunjukkan cara melakukan autentikasi menggunakan akun layanan saat Anda menggunakan Identity-Aware Proxy (IAP) dengan identitas eksternal.

Memperoleh client ID dan rahasia

  1. Buka halaman IAP di konsol Google Cloud.

    Buka halaman pembelian dalam aplikasi (IAP)

  2. Klik tab APLIKASI.

  3. Temukan aplikasi yang akan dikonfigurasi untuk menggunakan akun layanan.

  4. Pilih Go to OAuth configuration dari menu tambahan.

Halaman yang menampilkan client ID dan rahasia untuk aplikasi Anda akan muncul. Anda akan membutuhkannya untuk mengonfigurasi Identity Platform di bagian berikutnya.

Mengonfigurasi Google sebagai penyedia identitas

Jika project Identity Platform Anda belum menggunakan Google untuk autentikasi, buat konfigurasi baru menggunakan client ID dan secret Anda:

  1. Buka halaman Identity Platform Provider di Google Cloud Console.
    Buka halaman Penyedia Identitas

  2. Jika Anda menggunakan multi-tenancy Identity Platform, pilih tenant yang terkait dengan resource IAP Anda.

  3. Klik Tambahkan penyedia.

  4. Pilih Google dari daftar penyedia.

  5. Di bagian Konfigurasi Web SDK, masukkan client ID dan rahasia yang Anda peroleh di bagian sebelumnya.

  6. Klik Simpan.

Jika sudah menggunakan autentikasi Google, Anda dapat menggunakan client ID. Tindakan ini tidak akan mengganggu pengguna yang sudah ada.

  1. Buka halaman Identity Platform Provider di Google Cloud Console.
    Buka halaman Penyedia Identitas

  2. Jika Anda menggunakan multi-tenancy Identity Platform, pilih tenant yang terkait dengan resource IAP Anda.

  3. Cari Google dalam daftar penyedia, lalu klik Edit.

  4. Di bagian ID klien yang diizinkan, klik Tambahkan.

  5. Masukkan client ID yang Anda peroleh di bagian sebelumnya.

  6. Klik Simpan.

Bertukar token Google untuk token Identity Platform

Saat Anda pertama kali melakukan autentikasi dengan Google, Identity Platform akan menampilkan token ID Google. Selanjutnya, Anda dapat menukarnya dengan token Identity Platform dengan memanggil signInWithIdp:

Node.js

import * as firebase from 'firebase/app';
import 'firebase/auth';

const config = {
  apiKey: '...',
};
firebase.initializeApp(config);
const cred = firebase.auth.GoogleAuthProvider.credential(google_oidc_id_token);
firebase.auth().signInWithCredential(cred)
  .then((userCredential) => {
    return userCredential.user.getIdToken();
  })
  .then((gcipIdToken) => {
    // This token can now be used to access the resource.
  })
  .catch((error) => {
    // Error occurred.
  });

Python

SIGN_IN_WITH_IDP_API = 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp'

def exchange_google_id_token_for_gcip_id_token(api_key, tenant_id, google_open_id_connect_token):
  url = SIGN_IN_WITH_IDP_API + '?key=' + api_key
  data={'requestUri': 'http://localhost',
        'returnSecureToken': True,
        'postBody':'id_token=' + google_open_id_connect_token + '&providerId=google.com',
        'tenantId': tenant_id}
  resp = requests.post(url, data)
  res = resp.json()
  return res['idToken']

REST

Permintaan:

POST https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp?key=API-KEY

Isi:

{
"postBody":"id_token=GOOGLE-ID-TOKEN&providerId=google.com"
"requestUri": "http://localhost",
"returnIdpCredential": true,
"returnSecureToken": true,
"tenantId": "TENANT-ID"
}

Sertakan token ID Identity Platform di header otorisasi untuk mengakses resource melalui IAP:

curl -H "Authorization: Bearer GCIP-ID-TOKEN" "https://example.appspot.com/api"

Perlu diperhatikan bahwa identitas eksternal tidak mendukung IAM, sehingga Anda harus memperbarui kontrol akses aplikasi secara manual untuk memberikan akses ke akun layanan. Lihat JWT untuk identitas eksternal untuk mempelajari lebih lanjut.