Menggunakan akun layanan dengan identitas eksternal

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

Mendapatkan client ID dan secret

  1. Buka halaman IAP di konsol Google Cloud.

    Buka halaman IAP

  2. Klik tab APPLICATIONS.

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

  4. Pilih Buka konfigurasi OAuth dari menu tambahan.

Halaman yang menampilkan client ID dan secret untuk aplikasi Anda akan muncul. Anda memerlukannya 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 Providers di konsol Google Cloud.
    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 secret yang Anda dapatkan 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 Providers di konsol Google Cloud.
    Buka halaman Penyedia Identitas

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

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

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

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

  6. Klik Simpan.

Menukar token Google dengan token Identity Platform

Saat Anda pertama kali melakukan autentikasi dengan Google, Identity Platform akan menampilkan token ID Google. Kemudian, 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 Anda untuk mengakses resource oleh IAP:

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

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