Check this thread from a week or two ago about this very thing. http://discuss.develop.com/archives/wa.exe?A2=ind0204a&L=dotnet&F=&S=&P=54
-----Original Message----- From: Howard Pinsley To: [EMAIL PROTECTED] Sent: 4/11/02 3:07 PM Subject: [DOTNET] Question about Jeff Prosise's Article on ASP.NET Security I just read Jeff Prosise's excellent article on ASP.NET security. I had one question about doing forms authentication using a database of users and roles. His code sample uses a technique that appears to require looking up a user's role in the database for each page request -- as opposed to somehow assigning it in the "loginUrl" page. So, although the following code works... //From login.aspx private void CtlLoginBtn_Click(object sender, System.EventArgs e) { //get username/password from form and validate from database FormsAuthentication.RedirectFromLoginPage(username,false); } //From global.aspx protected void Application_AuthenticateRequest(Object sender, EventArgs e) { HttpApplication app = (HttpApplication) sender; if ((app.Request.IsAuthenticated) && (app.User.Identity is FormsIdentity)) { FormsIdentity Identity = (FormsIdentity) app.User.Identity; //Look up proper role for user. For now, test with "Alumni" GenericPrincipal p = new GenericPrincipal(Identity, new String[] { "Alumni" }); //Assign the new principal which now is in the right role app.Context.User = p; } } I would think there would be a way to assign the role (I'm testing with "Alumni") in the CtlLoginBtn_Click method and have that persist in the principal associated with the session. But I tried to move the resetting of the principal (with the new role) out of the Application_AuthenticateRequest into CtlLoginBtn_Click but it didn't work. Since Application_AuthenticateRequest appears to be called once per page, I then hoped that I could simply check if the user was already in a role and skip the db lookup. But alas the principal returned within the handler was not associated with any roles -- so that didn't work either. So is it really necessary to assign the roles for each request? I hope I'm missing something. Any insight? TIA You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com.