Sitzungen mit externen Identitäten verwalten

In diesem Artikel wird gezeigt, wie Sie Sitzungen mit Identity-Aware Proxy (IAP) verwaltet können, wenn Sie externe Identitäten für die Authentifizierung verwenden.

Sitzungen aktualisieren

Identity Platform-Sitzungen sind eine Stunde gültig. Wenn eine Sitzung abläuft, muss Ihre Anwendung zur Authentifizierungsseite weiterleiten. Diese Authentifizierungsseite enthält das Aktualisierungstoken von Identity Platform. Solange die Anmeldedaten des Nutzers noch gültig sind, können Sie diese zur erneuten Authentifizierung ohne Anzeige einer UI verwenden.

Wenn der Nutzer kürzlich seine E-Mail-Adresse oder sein Passwort geändert hat oder eine andere Aktion ausgeführt wurde, die sein Token aufgehoben hat, muss er den Authentifizierungsvorgang noch einmal durchführen.

Verarbeitung von Nicht-AJAX-Anfragen

Nicht-AJAX-Anfragen werden automatisch über eine Anwendungsweiterleitung verarbeitet, vorausgesetzt, die Authentifizierungsseite ist ordnungsgemäß konfiguriert.

Verarbeitung von AJAX-Anfragen

Wenn Sie eine AJAX-Anfrage mit einem abgelaufenen Token senden, gibt die Anfrage den Statuscode 401: Unauthorized zurück. Zur Behebung des Problems verwenden Sie eine der folgenden Lösungen:

  • Ändern Sie den Anwendungscode so, dass HTTP 401-Statuscodes verarbeitet werden.
  • Fügen Sie iframe zu Ihrer Anwendung hinzu, um auf die Sitzungsaktualisierung zu verweisen.
  • Weisen Sie Ihre Nutzer an, die Sitzungsaktualisierung manuell in einem separaten Tab zu laden.

Wenn Sie mit AJAX-Anfragen einen 302-Statuscode anstelle von 401 erhalten, fügen Sie einen X-Requested-With-Header mit dem Wert XMLHttpRequest hinzu. Dadurch wird IAP mitgeteilt, dass es sich um eine JavaScript-Anfrage handelt.

Programmatische Verarbeitung von HTTP 401

Die programmgesteuerte Behandlung von HTTP 401-Statuscodes ist die empfohlene Methode zum Aktualisieren einer AJAX-Sitzung. So gehen Sie dazu vor:

  1. Aktualisieren Sie Ihren Anwendungscode zum Verarbeiten des Fehlers.

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

  2. Fügen Sie einen Handler hinzu, der ein Fenster öffnet, um den Nutzer noch einmal zu authentifizieren, und es wieder schließt, wenn der Vorgang abgeschlossen ist.

    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;
      }
    }

iframe verwenden

Wenn sich HTTP 401 nicht programmatisch verarbeiten lässt, können Sie als alternative Lösung einen iframe zu Ihrer Anwendung hinzuzufügen, der auf die Sitzungsaktualisierung verweist. Beispiel:

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

Sitzungsaktualisierung laden

Als letzte Möglichkeit können Sie Ihre Nutzer anweisen, die Sitzungsaktualisierung manuell zu laden. Fügen Sie Ihrer Anwendung oder der zugehörigen Dokumentation eine Anleitung hinzu, mit der Nutzer die folgende URL in einem separaten Tab öffnen können:

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

Nutzer abmelden

Verwenden Sie den Abfrageparameter ?gcp-iap-mode=GCIP_SIGNOUT, um einen Nutzer von einer IAP-Ressource abzumelden. In einer App Engine-Anwendung sieht die URL beispielsweise so aus:

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

Wenn sich Nutzer abgemeldet haben, werden sie zur Anmeldeseite zurückgeleitet.

Um alle aktuell angemeldeten Nutzer abzumelden, leiten Sie sie zu Ihrer Authentifizierungs-URL weiter. Hängen Sie dabei Ihren API-Schlüssel und mode=signout als Parameter an. Beispiel:

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

Die Nutzer verbleiben nach erfolgter Abmeldung auf der Seite. Implementieren Sie am besten den Callback completeSignOut() für das Objekt AuthenticationHandler, damit der Nutzer erkennt, dass er sich erfolgreich abgemeldet hat.

Mandanten wechseln

In manchen Fällen möchte ein Nutzer mit mehreren Mandanten für eine bestimmte IAP-Ressource authentifizieren. Beispiel: Der Nutzer gehört zu mehreren Mandanten, die unterschiedliche Zugriffsebenen gewähren, und möchte zu einem Mandanten mit weniger oder mehr Berechtigungen wechseln.

Mit ?gcp-iap-mode=CLEAR_LOGIN_COOKIE können Sie den Neustart der Mandantenauswahl erzwingen. In einer App Engine-Anwendung kann die URL beispielsweise so aussehen:

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

Nächste Schritte