FormsAuthentication und schlaflose Nächte
From: Matthias S. (postamt_at__remove_emvoid_remove_.de)
Date: 03/19/05
- Next message: Olaf Lüder [MVP]: "Re: Verzeichnisschutz?"
- Previous message: Frank Bergmann: "Re: Verzeichnisschutz?"
- Next in thread: peter: "RE: FormsAuthentication und schlaflose Nächte"
- Reply: peter: "RE: FormsAuthentication und schlaflose Nächte"
- Messages sorted by: [ date ] [ thread ]
Date: Sat, 19 Mar 2005 16:49:43 +0100
Hei!
Also was ich vorhabe ist nun wirklich nicht bahnbrechend: Ich habe eine
WebApp mit 2 Unterverzeichnissen, "AdminArea" u. "EditorArea".
Berechtigungen für diese Verzeichnisse werden über Rollen vergeben. Hier
ein paar Ausschnitte aus meiner Web-Config:
<location path="EditorArea">
<system.web>
<authorization>
<allow roles="Editors" />
<deny users="*" />
</authorization>
</system.web>
</location>
Wenn der User meiner LogonForm ausgefüllt hat und aufs Knöpfchen drückt,
passiert folgendes:
// wir haben kontrolliert ob der user existiert, das richtige
// passwort hat und auch ansonsten glücklich ist
// zur erklärung: sUser = BenutzerName, sRole = RollenName und
// sTargetURL hält die Seite, an die er nach dem Logon geschickt
// wird
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
sUser,
DateTime.Now,
DateTime.Now.AddMinutes(20),
false,
sRole,
FormsAuthentication.FormsCookiePath);
string sEncTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,
sEncTicket);
Context.Response.Cookies.Add(cookie);
Response.Redirect(sTargetURL);
Die Rolle im Ticket aufzubewahren scheint mir das Naheliegenste zu sein.
Schließlich will ich nicht bei jedem Request die Datenbank belästigen.
Und hier der AuthenticateRequest-Handler in meiner Global.asax:
protected void Application_AuthenticateRequest(Object sender, EventArgs e) {
if(Request.IsAuthenticated) {
string[] sRoles = new string[1];
FormsAuthenticationTicket ticket =
FormsAuthentication.Decrypt(Request.Cookies.Get(FormsAuthentication.FormsCookieName).Value);
if (ticket == null) {
throw new Exception("Authorisation Ticket invalid!");
}
sRoles[0] = ticket.UserData;
Context.User = new System.Security.Principal.GenericPrincipal(new
FormsIdentity(ticket), sRoles);
}
}
Prima. Das alles funktioniert einwandfrei. Ein kleiner Showstopper ist
allerdings, dass ich nicht mehr ausloggen kann. Dazu habe ich einen
neuen Knopf gebastelt, der in seinem OnClick handler ca. so aussieht:
FormsAuthentication.SignOut();
Response.Redirect("Logon.aspx", true);
Trace angeschaltet und schaun wir mal. Auf der Logon Seite finde ich
immernoch meine encrypteten Tickets (2 sogar, schau an schau an). Ok,
denk ich, nehm wir den Hammer. Die Änderungen des OnClick handlers sehen
so aus:
// nimm das...
Session.Clear();
// und das...
FormsAuthentication.SignOut();
HttpCookie cookie = null;
// immerhin sind es doch nur cookies, oder?
foreach (string sCookie in Response.Cookies) {
if (sCookie.ToLower() == FormsAuthentication.FormsCookieName.ToLower()) {
cookie = Response.Cookies[sCookie];
cookie.Expires = DateTime.Now.AddDays(-1);
}
}
// immer feste, die können das ab
foreach (string sCookie in Request.Cookies) {
if (sCookie.ToLower() == FormsAuthentication.FormsCookieName.ToLower()) {
cookie = Response.Cookies[sCookie];
cookie.Expires = DateTime.Now.AddDays(-1);
}
}
// wenn das gemetzel n cookie überlebt hat, will ich n neuen job...
Response.Redirect("Logon.aspx", true);
Naja, meine Logon Seite hat (nach einem vollführten Logoff!!!) immernoch
die folgenden cookies:
lgfrm
FFA588268022AB93E8A4CF39B9CE6C2D24353F30986BAA9E0982E8B068DA82F0FF477FE8913BB3990EFEE242E6E4CE967B9E0B88F4243E3061ECA8614101B9C52E0A4E6B971BABB8
150
lgfrm
FFA588268022AB93E8A4CF39B9CE6C2D24353F30986BAA9E0982E8B068DA82F0FF477FE8913BB3990EFEE242E6E4CE967B9E0B88F4243E3061ECA8614101B9C52E0A4E6B971BABB8
150
Könnte mir vielleicht jemand damit helfen? Freue mich über jegliche
Unterstützung. Falls mir jemand erklären könnte, was unter der Haube bei
FormsAuthentication.SignOut() passieren sollte, wäre ich auch ganz dankbar.
Grüße aus Berlin!
-- /Matthias
- Next message: Olaf Lüder [MVP]: "Re: Verzeichnisschutz?"
- Previous message: Frank Bergmann: "Re: Verzeichnisschutz?"
- Next in thread: peter: "RE: FormsAuthentication und schlaflose Nächte"
- Reply: peter: "RE: FormsAuthentication und schlaflose Nächte"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|