Skip to content

Cookies

Das ASP.NET Core und Duende IdentityServer Framework stellen je nach Situation verschiedene Cookies aus. Während es langlebige Cookies gibt, die genutzt werden um einen Benutzer zu einem späteren Zeitpunkt wieder zu erkennen, gibt es Cookies die nur kurzzeitig ausgestellt werden um einen gewissen State während dem Anmeldeprozess zu halten.

Siehe auch Authentication Session und External Identity Providers - The role of cookies.

Ältere Dokumentation des Vorgänger-Frameworks: * SignIn - Cookie authentication * Sign-in with External Identity Providers - The role of cookies

Abhängig davon, ob ein externe Identitätsprovider sehr viele Claims ausstellt, kann es sein, dass der CMI STS mehr Daten in einem Cookie unterbringen möchte, als die maximale Cookie-Länge zulässt. Dies sind in der Regel Limits bei den User-Agents/Browsern. Das .NET Core Framework führt in diesem Fall automatisch ein "Cookie chunking" durch. Dabei werden die Daten auf mehrere einzelne Cookies verteilt.

Die Chunk-Size der Cookies kann per Konfiguration festgelegt werden. Sie sollte jedoch auf dem Standwert von Microsoft belassen werden, solange es kein Problem mit der Cookie-Verarbeitung gibt.

{
    "CookieManager": {
        "ChunkSize": 4050
    }
}
  • CookieManager.ChunkSize (optional, Standardwert: .NET Core Standard (4050)): Maximale Byte-Länge eines Cookies. Der gültige Wertebereich ist 100 bis 4050. Achtung: Gemäss der RFC 2109 müssen User-Agents mindestens 20 Cookies pro Domain unterstützen. Oft wird ein Limit von 30 bis 50 Cookies genannt. Wird die Chunk-Size zu klein gewählt, können diese Limits überschritten werden. Die Chunk-Size ist so gross, wie möglich zu wählen.

Wichtig: Die Cookie-Lifetime darf nicht mit der Access-Token-Lifetime verwechselt werden.

Der CMI STS stellt nach einer erfolgreichen Anmeldung das Cookie idsrv aus. Anhand diesem Cookie erkennt der CMI STS den Benutzer erneut (siehe auch Sign-in). Es handelt sich standardmässig um ein Sliding-Cookie und wird vom CMI STS automatisch verlängert.

Tipp: Der Inhalt dieses Cookies ist verschlüsselt, ein authentifizierter Benutzer kann den Inhalt aber auf der Diagnostics-Seite anzeigen lassen. Die Eigenschaften .issued und .expires zeigen die Laufzeit des Cookies an.

Die Cookie-Lifetime kann global und Mandanten-spezifisch festgelegt werden. Die Einstellungen überschreiben sich in folgender Reihenfolge:

  1. Keine Konfiguration: 10 Stunden, Session-Cookie, Sliding
  2. Globale Cookie-Lifetime-Konfiguration
  3. Mandanten-spezifische Cookie-Lifetime-Konfiguration
{
    // Globale Konfiguration
    "AuthCookie": {
        "LifetimeMinutes": 360,
        "IsPersistent": false,
        "AllowRefresh": true
    },
    "Tenants": {
        "mandant": {
          "AuthCookie": {
              // Mandanten-spezifische Konfiguration
            }
        }
    }
}
  • LifetimeMinutes (optional, Standardwert: null): Lebenszeit des Cookies in Minuten.
  • IsPersistent (optional, Standardwert: null, deaktiviert): Weist den Browser an, dass Cookie beim schliessen des Browsers nicht zu löschen und bei der nächsten Sitzung wieder zu verwenden.
  • AllowRefresh (optional, Standardwert: null, aktiviert): Erlaubt das verlängern der Cookie-Laufzeit, wenn das Cookie vor dem Ende der Laufzeit dem CMI STS nochmals präsentiert wird (Sliding-Cookie).

Achtung: IsPersistent wird vom Desktop Client erst ab Version >=22.0 (R22) vollständig und korrekt unterstützt. Wird die Option aktiviert wenn R21 im Einsatz ist, ist eine erste Anmeldung möglich. Wir der Desktop Client geschlossen und wieder erneut geöffnet, ist eine Anmeldung nur möglich falls das persistente Cookie bereits abgelaufen ist oder der IE 11 Cache zuvor gelöscht wird.

Hinweis: Wenn IsPersistent false oder null ist, wird an den Browser ein Session-Cookie gesendet. Das Cookie wird gelöscht, sobald der Browser geschlossen wird. Massgebend für die Cookie-Gültigkeit ist jedoch die Eigenschaft .expires, die im Cookie codiert ist und vom CMI STS ausgewertet wird. Wenn IsPersistent den Wert true hat, erhält der Browser ein Persistent-Cookie, mit einer Lebenszeit gleich .expires.