Mengelola sesi dengan identitas eksternal

Artikel ini menjelaskan cara mengelola sesi dengan Identity-Aware Proxy (IAP) jika Anda menggunakan identitas eksternal untuk autentikasi.

Memperbarui sesi

Sesi Identity Platform berlaku selama satu jam. Saat sesi berakhir, aplikasi Anda harus mengalihkan ke halaman autentikasi. Halaman autentikasi berisi token refresh Identity Platform. Selama kredensial pengguna masih valid, Anda dapat menggunakannya untuk autentikasi ulang tanpa menampilkan UI apa pun.

Jika pengguna baru-baru ini mengubah email atau sandinya, atau terjadi tindakan lain yang mencabut tokennya, pengguna harus menyelesaikan alur autentikasi lagi.

Menangani permintaan non-AJAX

Permintaan non-AJAX ditangani secara otomatis menggunakan pengalihan aplikasi, dengan asumsi halaman autentikasi dikonfigurasi dengan benar.

Menangani permintaan AJAX

Chrome dan browser lainnya menghentikan penggunaan cookie pihak ketiga secara bertahap. Rekomendasi untuk membuat permintaan AJAX di halaman ini tidak akan berfungsi jika cookie pihak ketiga dinonaktifkan. Namun, rekomendasi yang diberikan akan tetap berfungsi jika sumber dan target permintaan AJAX berasal dari situs yang sama.

Untuk mengetahui petunjuk tentang cara mengelola cookie pihak ketiga di Chrome, lihat Menghapus, mengizinkan, dan mengelola cookie di Chrome.

Jika Anda mengirim permintaan AJAX dengan token yang sudah tidak berlaku, permintaan tersebut akan menampilkan kode status 401: Unauthorized. Terapkan salah satu solusi berikut untuk menangani hal ini:

  • Ubah kode aplikasi Anda untuk menangani kode status HTTP 401.

  • Tambahkan iframe ke aplikasi Anda untuk mengarah ke pembaru sesi.

  • Minta pengguna untuk memuat pemuat ulang sesi secara manual di tab terpisah.

Jika Anda menerima kode status 302, bukan 401, sebagai respons terhadap permintaan AJAX, tambahkan header X-Requested-With dengan nilai XMLHttpRequest. Hal ini memberi tahu IAP bahwa permintaan berasal dari JavaScript.

Menangani HTTP 401 secara terprogram

Menangani kode status HTTP 401 secara terprogram adalah cara yang direkomendasikan untuk memperbarui sesi AJAX. Untuk melakukannya:

  1. Perbarui kode aplikasi Anda untuk menangani error.

    if (response.status === 401) {
      statusElm.innerHTML = 'Login stale. <input type="button" value="Refresh" onclick="sessionRefreshClicked();"/>';
    }

  2. Tambahkan pengendali yang membuka jendela untuk mengautentikasi ulang pengguna, lalu menutupnya setelah proses selesai.

    var iapSessionRefreshWindow = null;
    
    function sessionRefreshClicked() {
      if (iapSessionRefreshWindow == null) {
        iapSessionRefreshWindow = window.open("/?gcp-iap-mode=DO_SESSION_REFRESH");
        window.setTimeout(checkSessionRefresh, 500);
      }
      return false;
    }
    
    function checkSessionRefresh() {
      if (iapSessionRefreshWindow != null && !iapSessionRefreshWindow.closed) {
        // Attempting to start a new session.
        // XMLHttpRequests is used by the server to identify AJAX requests
        fetch('/favicon.ico', {
              method: "GET",
              credentials: 'include',
              headers: {
                  'X-Requested-With': 'XMLHttpRequest'
              }
        .then((response) => {
          // Checking if browser has a session for the requested app
          if (response.status === 401) {
            // No new session detected. Try to get a session again
            window.setTimeout(checkSessionRefresh, 500);
          } else {
            // Session retrieved.
            iapSessionRefreshWindow.close();
            iapSessionRefreshWindow = null;
          }
        })
        });
      } else {
        iapSessionRefreshWindow = null;
      }
    }

Menggunakan iframe

Jika Anda tidak dapat menangani HTTP 401 secara terprogram, solusi terbaik berikutnya adalah menambahkan iframe ke aplikasi Anda yang mengarah ke pemuat ulang sesi.

Penggunaan iframe mengharuskan Anda mengonfigurasi halaman login kustom di domain yang sama dengan aplikasi web yang diamankan IAP. Jika tidak, pengguna akan mengalami error lintas origin. Untuk mengetahui informasi selengkapnya tentang konfigurasi halaman login, lihat membuat halaman login kustom.

Contoh penggunaan iframe:

<iframe src="https://example.com/some/path?gcp-iap-mode=SESSION_REFRESHER" style="width:0;height:0;border:0; border:none;"></iframe>

Memuat penyegaran sesi

Sebagai upaya terakhir, Anda dapat menginstruksikan pengguna untuk memuat pemuat ulang sesi secara manual. Tambahkan panduan ke aplikasi atau dokumentasinya yang mengarahkan pengguna untuk membuka URL berikut di tab terpisah:

https://example.com/some/path?gcp-iap-mode=SESSION_REFRESHER

Membuat pengguna logout

Untuk mengeluarkan pengguna dari resource IAP, gunakan parameter kueri ?gcp-iap-mode=GCIP_SIGNOUT. Misalnya, di aplikasi App Engine, URL-nya terlihat seperti ini:

https://example.com/some/path?gcp-iap-mode=GCIP_SIGNOUT

Pengguna akan dialihkan kembali ke halaman login setelah logout.

Untuk memproses logout pengguna dari semua resource dan sesi, alihkan pengguna ke URL autentikasi Anda dengan kunci API dan mode=signout ditambahkan sebagai parameter. Contoh:

https://auth.example.com/?apiKey=API-KEY&mode=signout

Pengguna akan tetap berada di halaman setelah logout selesai. Pertimbangkan untuk menerapkan callback completeSignOut() pada objek AuthenticationHandler untuk memberikan masukan kepada pengguna bahwa mereka telah berhasil logout.

Beralih antar-tenant

Dalam beberapa kasus, pengguna mungkin ingin melakukan autentikasi dengan beberapa tenant untuk resource IAP yang sama. Misalnya, mereka mungkin termasuk dalam beberapa tenant yang memberikan tingkat akses berbeda, dan ingin beralih ke tenant dengan hak istimewa yang lebih sedikit atau lebih banyak.

Untuk memaksa proses pemilihan tenant dimulai ulang, gunakan ?gcp-iap-mode=CLEAR_LOGIN_COOKIE. Misalnya, di aplikasi App Engine, URL mungkin terlihat seperti ini:

https://PROJECT-ID.appspot.com/some/path?gcp-iap-mode=CLEAR_LOGIN_COOKIE

Langkah berikutnya