Gestione delle sessioni con identità esterne

Questo articolo spiega come gestire le sessioni con Identity-Aware Proxy (IAP) se utilizzi identità esterne per l'autenticazione.

Aggiornamento delle sessioni

Le sessioni di Identity Platform sono valide per un'ora. Quando una sessione scade, l'app deve reindirizzare alla pagina di autenticazione. La pagina di autenticazione contiene il token di aggiornamento di Identity Platform. Finché le credenziali dell'utente sono ancora valide, puoi utilizzarle per la riautenticazione senza mostrare alcuna UI.

Se l'utente ha modificato di recente l'indirizzo email o la password oppure se si è verificata un'altra azione che ha revocato il token, dovrà completare nuovamente il flusso di autenticazione.

Gestione delle richieste non JDBC

Le richieste non AJAX vengono gestite automaticamente utilizzando un reindirizzamento dell'applicazione, supponendo che la pagina di autenticazione sia configurata correttamente.

Gestione delle richieste AJAX

Chrome e altri browser stanno eliminando gradualmente i cookie di terze parti. I consigli per effettuare richieste AJAX in questa pagina non funzionano se i cookie di terze parti sono disattivati. Tuttavia, i suggerimenti forniti rimarranno validi se l'origine e la destinazione delle richieste AJAX provengono dallo stesso sito.

Per istruzioni sulla gestione dei cookie di terze parti in Chrome, consulta l'articolo Eliminare, consentire e gestire i cookie in Chrome.

Se invii una richiesta AJAX con un token scaduto, la richiesta restituirà un codice di stato 401: Unauthorized. Implementa una delle seguenti soluzioni per risolvere questo problema:

  • Modifica il codice dell'applicazione affinché possa gestire i codici di stato HTTP 401.
  • Aggiungi un iframe alla tua applicazione per indirizzare al ripasso della sessione.
  • Chiedi agli utenti di caricare manualmente il riepilogo della sessione in una scheda separata.

Se ricevi un codice di stato 302 anziché 401 in risposta alle richieste AJAX, aggiungi un'intestazione X-Requested-With con valore XMLHttpRequest. Questo indica a IAP che la richiesta ha origine da JavaScript.

Gestione programmatica di HTTP 401

La gestione programmatica dei codici di stato HTTP 401 è il modo consigliato per aggiornare una sessione AJAX. Per farlo:

  1. Aggiorna il codice dell'applicazione per gestire l'errore.

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

  2. Aggiungi un gestore che apra una finestra per riautenticare l'utente, quindi la chiuda al completamento del processo.

    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) {
        fetch('/favicon.ico').then(function(response) {
          if (response.status === 401) {
            window.setTimeout(checkSessionRefresh, 500);
          } else {
            iapSessionRefreshWindow.close();
            iapSessionRefreshWindow = null;
          }
        });
      } else {
        iapSessionRefreshWindow = null;
      }
    }

Utilizzo di un iframe

Se non sei in grado di gestire HTTP 401 in modo programmatico, la soluzione migliore consiste nell'aggiungere all'applicazione un iframe che indirizzi al ripasso della sessione. Ad esempio:

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

Caricamento del riepilogo della sessione in corso...

Come ultima risorsa, puoi chiedere agli utenti di caricare manualmente il riepilogo della sessione. Aggiungi indicazioni alla tua applicazione o alla relativa documentazione che inducono gli utenti ad aprire il seguente URL in una scheda separata:

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

Disconnettere gli utenti

Per disconnettere un utente da una risorsa IAP, utilizza il parametro di query ?gcp-iap-mode=GCIP_SIGNOUT. Ad esempio, in un'app App Engine, l'URL è simile al seguente:

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

Una volta disconnessi, gli utenti verranno reindirizzati alla pagina di accesso.

Per disconnettere un utente da tutte le risorse e le sessioni, reindirizzalo all'URL di autenticazione con la chiave API e l'aggiunta di mode=signout come parametri. Ad esempio:

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

Gli utenti rimarranno nella pagina una volta completata la disconnessione. Potresti implementare il callback completeSignOut() nell'oggetto AuthenticationHandler per fornire un feedback all'utente che ha eseguito correttamente la disconnessione.

Passaggio da un tenant all'altro

In alcuni casi, un utente può voler eseguire l'autenticazione con più tenant per la stessa risorsa IAP. Ad esempio, potrebbero appartenere a più tenant che concedono livelli di accesso diversi e vogliono passare a un tenant con privilegi minori o maggiori.

Per forzare il riavvio del processo di selezione del tenant, utilizza ?gcp-iap-mode=CLEAR_LOGIN_COOKIE. Ad esempio, in un'app App Engine, l'URL potrebbe essere il seguente:

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

Passaggi successivi