17 August 2011 ASP.NET, Auth, Authentication, Cookie, Forms Robert Muehsig

Die Forms-Authentication ist die low-Level-Form der “Authentifizierung”. Ein Forms-Authentication Cookie zu setzen geht z.B. wie folgt:

        public ActionResult SetAuthCookie()
        {
            FormsAuthentication.SetAuthCookie(Guid.NewGuid().ToString(), false);
            return RedirectToAction("Index");
        }

 

Kern der Sache ist die FormsAuthentication Klasse. Ein sehr guten Einblick darüber, wie Forms Auth funktioniert gibt es in diesem MSDN Artikel. Der FormsAuthentication Mechanismus ist recht “tief” ins Framework integriert, jedenfalls sind die HttpModule in der Machine.config, daher muss man nur noch die Konfiguration in der Web.config vornehmen, z.B.:

    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2" />
    </authentication>

 

(Ich habe das Timeout auf 2 Minuten gesetzt um die Demo besser zu zeigen ;) ).

Beim “Verscripten” einer Webanwendung hatte ein Kollege von mir ein Problem bekomme, da ab einer bestimmten Zeit immer die Anmeldemaske ihm wieder zurückgeliefert wurde, obwohl das eingestellte Timeout noch nicht erreicht war und er die ganze Zeit (mit seinem Script) auf der Website aktiv war. Wie kommt das?

Ausgangslage:

Wir haben von der Loginseite das FormsAuth Cookie ausgestellt bekommen und senden dies natürlich auch immer wieder im Request mit, sodass das “Forms-Auth-Ticket” aktiv bleibt:

image

Die Komponente die dafür sorgt, dass das Forms-Auth-Ticket bei Aktivität verlängert wird, wird über das Property “SlidingExpiration” (was per Default auf true ist) gesteuert.

RTFM…

Warum wurde nun das Script von dem Kollegen die Anmeldemaske wieder gezeigt? Die Antwort liefert auch die MSDN:

Sliding expiration resets the expiration time for a valid authentication cookie if a request is made and more than half of the timeout interval has elapsed. If the cookie expires, the user must re-authenticate. Setting theSlidingExpiration property to false can improve the security of an application by limiting the time for which an authentication cookie is valid, based on the configured timeout value.

D.h.

Nach rund der Hälfte der Timeout Zeit, wird ein neues Cookie generiert:

image

Sprich, wenn das Timeout 10 Minuten beträgt, dann wird in der 5-6 Minute (wenn ein neuer Request in der Zeit abgesetzt wird) ein neues Cookie erstellt.

Jetzt klappts auch mit dem Scripting ;)

PS: Natürlich passiert dieser Prozess nur, wenn Sliding Expiration auch auf den Standardwert bleibt.


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!