Questa pagina descrive in che modo Identity-Aware Proxy (IAP) gestisce una richiesta con una sessione scaduta e come assicurarsi che le richieste di app AJAX e le richieste WebSocket vadano a buon fine.
Flusso della sessione IAP
Quando utilizza il flusso di accesso IAP standard, l'utente riceve un cookie di sessione che fa riferimento alla sua sessione di accesso Google. IAP utilizza questo cookie per confermare che l'utente ha ancora eseguito l'accesso. IAP richiede che un utente acceda prima di poter accedere a un'app protetta da IAP.
Le sessioni IAP vengono aggiornate periodicamente. Tuttavia, se l'utente utilizza un Account Google per accedere, le sessioni IAP sono associate anche alla sessione di accesso a Google dell'utente. In questo caso, IAP richiederà all'utente di accedere di nuovo solo in una delle seguenti situazioni:
L'utente è uscito dal proprio account
Il suo account è stato sospeso
L'account richiede la reimpostazione della password
Se un utente è disconnesso, IAP rileva una modifica dello stato dell'Account Google entro un paio di minuti. Una volta rilevata, IAP invalida la sessione.
IAP ricontrolla l'autorizzazione di Identity and Access Management (IAM) per tutte le richieste durante le sessioni valide. L'applicazione degli aggiornamenti alla policy di accesso IAM di un'app protetta da IAP potrebbe richiedere alcuni minuti.
Scadenza della sessione IAP
Per un flusso di accesso che utilizza un Account Google, la sessione IAP è legata alla sessione di accesso Google sottostante e scade solo alla scadenza di quella sessione, indipendentemente dalla rivendicazione exp nel JWT inviato nell'intestazione dell'autorizzazione.
Per l'autenticazione programmatica, IAP rispetta l'attestazione exp nel JWT inviato nell'intestazione Authorization.
Per il flusso di accesso di Identity Platform, la sessione IAP rimane valida per un massimo di un'ora dopo la disconnessione dell'utente.
Richiesta di accesso per gli Account Google
Il valore loginHint impostato tramite
IapSettings
deve corrispondere al dominio dell'utente che ha eseguito l'accesso. Se questi valori non corrispondono, il prompt di accesso viene visualizzato se il cookie IAP viene cancellato o scade.
Richieste WebSocket
IAP supporta WebSocket solo per le richieste iniziali e non controlla continuamente l'autorizzazione. Quando viene ricevuta una richiesta WebSocket, questa inizia con una richiesta HTTP Upgrade.
IAP la valuta come una richiesta HTTP GET standard. Dopo che la richiesta è stata autorizzata, IAP la passa al server, aprendo una connessione permanente. Dopodiché, IAP non monitora le richieste né aggiorna la sessione.
Risposte alle sessioni scadute
IAP restituisce risposte diverse per le sessioni scadute in base al tipo di richiesta.
Richieste non AJAX
Per le richieste non AJAX, l'utente viene reindirizzato al flusso di accesso per aggiornare la sessione. Se l'utente ha ancora eseguito l'accesso, questo reindirizzamento è trasparente.
Richieste AJAX
Chrome e altri browser stanno ritirando gradualmente i cookie di terze parti. I consigli per effettuare richieste AJAX in questa pagina non funzioneranno se i cookie di terze parti sono disattivati. Tuttavia, i consigli forniti rimarranno funzionali se sia l'origine che la destinazione delle richieste AJAX provengono dallo stesso sito.
Per istruzioni sulla gestione dei cookie di terze parti in Chrome, consulta Elimina, consenti e gestisci i cookie in Chrome.
IAP si basa sui cookie per gestire le sessioni utente. Inoltre, si basa su una sequenza di reindirizzamenti per stabilire una sessione nell'ambito di un flusso di accesso. Non è sempre possibile stabilire una sessione se l'applicazione utilizza la condivisione delle risorse multiorigine (CORS) per effettuare richieste AJAX a un'applicazione protetta da IAP.
Per effettuare correttamente una richiesta CORS a un'applicazione protetta da IAP, è necessario stabilire una sessione IAP fuori banda. Tieni presente che per una richiesta AJAX che invia una richiesta CORS da source_domain->target_domain, dove target_domain ospita l'applicazione protetta da IAP, deve essere stabilita una sessione su target_domain. Non è possibile condividere i cookie tra source_domain e target_domain.
Una volta stabilita la sessione su target_domain, lo sviluppatore deve abilitare l'invio delle credenziali nella richiesta. Per impostazione predefinita, i metodi JavaScript non collegano i cookie alle richieste. Per abilitare le credenziali nella richiesta,
le richieste inviate con un oggetto
XMLHttpRequest
devono avere la proprietà withCredentials impostata su true, mentre le richieste inviate
con
Fetch API
devono avere l'opzione credentials impostata su include o same-origin.
La seguente guida consiglia un pattern per gli sviluppatori web per poter stabilire e aggiornare correttamente una sessione IAP.
Informazioni sulla risposta IAP
Per le richieste AJAX, IAP restituisce un codice di stato HTTP 401: Unauthorized. Tieni presente che il rilevamento delle richieste AJAX non può essere eseguito in modo perfetto. Se ricevi una risposta con codice di stato 302 anziché con codice di stato 401 alle richieste AJAX, puoi aggiungere alle richieste AJAX un'intestazione X-Requested-With con un valore "XMLHttpRequest". In questo modo, IAP sa che la richiesta proviene da JavaScript.
Gestione di una risposta AJAX HTTP 401
Per stabilire una sessione IAP dopo che l'applicazione riceve
HTTP 401, l'applicazione può aprire una nuova finestra per l'URL
target_domain + ?gcp-iap-mode=DO_SESSION_REFRESH. Si tratta di un gestore speciale che stabilisce la sessione IAP solo su target_domain. Se la finestra viene mantenuta aperta, la sessione continuerà ad aggiornarsi periodicamente, richiedendo l'input utente dell'utente, se necessario.
Se vuole, l'utente può scegliere di chiudere la finestra e il gestore dello stato HTTP 401 nel codice dello sviluppatore dovrebbe mostrare di nuovo una finestra popup per l'aggiornamento della sessione, se necessario.
Passaggio 1: modifica il codice dell'app
L'esempio seguente mostra come modificare il codice dell'app per gestire il codice di stato HTTP 401 e fornire all'utente un link per l'aggiornamento della sessione:
Passaggio 2: installa un gestore onclick
Il seguente codice campione installa un gestore onclick che chiude la finestra dopo l'aggiornamento della sessione: