Ask a Question related to ASP.NET Security, Design and Development.
-
George Durzi #1
Stumped on FormsAuth Cookie Timing Out
hi all, I am totally stumped, and I need your help.
My authentication cookie (using FormsAuth against Active Directory) is
expiring way too often (like less than 20 minutes). I have it set to expire
in 8 hours. I'm not deploying anything to the site, so I'm not resetting the
application during that time.
Here's all the code which deals with any authentication. Any feedback would
be GREATLY appreciated.
in web.config
<authentication mode="Forms">
<forms loginUrl="login.aspx" name="adAuthCookie" timeout="480" path="/"
/>
</authentication>
User Login Function (References LDAPAuthentication class, unnecessary for
this example)
#region LoginUser
private void LoginUser()
{
// Retrieve LDAP Connect String and Domain Name
string sADPath =
ConfigurationSettings.AppSettings["LDAPConnectString"].ToString();
string sDomain =
ConfigurationSettings.AppSettings["DomainName"].ToString();
// Instance of LdapAuthentication class
LDAPAuthentication oLdapAuth = new LDAPAuthentication(sADPath);
try
{
if (true == oLdapAuth.IsAuthenticated(sDomain, txtUserName.Value.Trim(),
txtPassword.Value.Trim()))
{
// Retrieve a list of AD Groups the User is a Member of
string sGroups = oLdapAuth.GetGroups();
// Create the User's FormsAuthenticationTicket
FormsAuthenticationTicket oAuthTicket = new
FormsAuthenticationTicket(1, txtUserName.Value.Trim(), DateTime.Now,
DateTime.Now.AddHours(8), true, sGroups);
// Encrypt the FormsAuthenticationTicket
string sTicket = FormsAuthentication.Encrypt(oAuthTicket);
// Create the auth cookie for the User
HttpCookie oCookie = new
HttpCookie(FormsAuthentication.FormsCookieName, sTicket);
oCookie.Expires = DateTime.Now.AddHours(8);
// Add the cookie to the collection
Response.Cookies.Add(oCookie);
// Redirect the User
Response.Redirect(FormsAuthentication.GetRedirectU rl(txtUserName.Value.Trim(
), false));
}
else
{
divLoginError.Visible = true;
lblLogin.Text = "* Sorry, you entered incorrect login credentials,
please try again. *";
}
}
catch (Exception ex)
{
throw (ex);
}
}
#endregion
Then in my Application_AuthenticateRequest
#region Application_AuthenticateRequest
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
// Retrieve FormsAuthentication Cookie Name
string sCookieName = FormsAuthentication.FormsCookieName;
// Retrieve Authentication Cookie
HttpCookie oCookie = Context.Request.Cookies[sCookieName];
// If cookie doesn't exist, exit function
if (null == oCookie) return;
// Create FormsAuthenticationTicket object
FormsAuthenticationTicket oAuthTicket = null;
try
{
// Retrieve FormsAuthenticationtTicket from encrypted cookie
oAuthTicket = FormsAuthentication.Decrypt(oCookie.Value);
// Renew the ticket if it's expired
if (oAuthTicket.Expired) oAuthTicket =
FormsAuthentication.RenewTicketIfOld(oAuthTicket);
}
catch (Exception) { return; }
// If FormsAuthenticationtTicket doesn't exist, exit function
if (null == oAuthTicket) return;
// Retrieve array of Group Names from FormsAuthenticationtTicket
string[] sGroupsArray = oAuthTicket.UserData.Split(new char[]{'|'});
// Create a GenericIdentity Object
GenericIdentity oIdentity = new GenericIdentity(oAuthTicket.Name,
"LDAPAuthentication");
// Create a GenericPrincipal Object from the GenericIdentity and the
Groups Array
GenericPrincipal oPrincipal = new GenericPrincipal(oIdentity,
sGroupsArray);
// Assign the current HTTP instance of the application to the
GenericPrincipal object
Context.User = oPrincipal;
}
George Durzi Guest
-
Response.ReDirect / FormsAuth.ForwardFromLogin not working
Instead of doing :- FormsAuthentication.SetAuthCookie (txtUserName.Text,false); Response.Redirect... -
I think no one knows the answer of timeout in formsauth!!!!!! the one i posted last week..
-- Thanks and Regards, Amit Agarwal Software Programmer(.NET) --- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system... -
Single signon (with FormsAuth) for mutliple web apps
I'm working on single signon for multiple web apps on a single domain. If I authenticate in wepApp1 then I am authenticated in webApp2 however,... -
FormsAuth Ticket Keeps Expiring
Calling out ASP.NET Forms Auth Experts! I need your help. Using FormsAuthentication to auth against Active Directory. During my login process,... -
FormsAuth and Sessions Troubles...
I'm having some trouble implementing Forms Authentication and using Session variables... If i just turn on Forms Auth and don't set up any roles... -
George Durzi #2
Re: Stumped on FormsAuth Cookie Timing Out
Does anyone know if there's another timeout setting that's maybe in IIS?
I've set it in web.config, machine.config, and in my code when creating my
cookie
"George Durzi" <gdurzi@nospam_hotmail.com> wrote in message
news:u2TNNRtfDHA.2664@TK2MSFTNGP11.phx.gbl...expire> hi all, I am totally stumped, and I need your help.
> My authentication cookie (using FormsAuth against Active Directory) is
> expiring way too often (like less than 20 minutes). I have it set tothe> in 8 hours. I'm not deploying anything to the site, so I'm not resettingwould> application during that time.
>
> Here's all the code which deals with any authentication. Any feedbacktxtUserName.Value.Trim(),> be GREATLY appreciated.
>
> in web.config
> <authentication mode="Forms">
> <forms loginUrl="login.aspx" name="adAuthCookie" timeout="480" path="/"
> />
> </authentication>
>
> User Login Function (References LDAPAuthentication class, unnecessary for
> this example)
>
> #region LoginUser
> private void LoginUser()
> {
> // Retrieve LDAP Connect String and Domain Name
> string sADPath =
> ConfigurationSettings.AppSettings["LDAPConnectString"].ToString();
> string sDomain =
> ConfigurationSettings.AppSettings["DomainName"].ToString();
>
> // Instance of LdapAuthentication class
> LDAPAuthentication oLdapAuth = new LDAPAuthentication(sADPath);
>
> try
> {
> if (true == oLdapAuth.IsAuthenticated(sDomain,Response.Redirect(FormsAuthentication.GetRedirectU rl(txtUserName.Value.Trim(> txtPassword.Value.Trim()))
> {
> // Retrieve a list of AD Groups the User is a Member of
> string sGroups = oLdapAuth.GetGroups();
>
> // Create the User's FormsAuthenticationTicket
> FormsAuthenticationTicket oAuthTicket = new
> FormsAuthenticationTicket(1, txtUserName.Value.Trim(), DateTime.Now,
> DateTime.Now.AddHours(8), true, sGroups);
> // Encrypt the FormsAuthenticationTicket
> string sTicket = FormsAuthentication.Encrypt(oAuthTicket);
>
> // Create the auth cookie for the User
> HttpCookie oCookie = new
> HttpCookie(FormsAuthentication.FormsCookieName, sTicket);
> oCookie.Expires = DateTime.Now.AddHours(8);
>
> // Add the cookie to the collection
> Response.Cookies.Add(oCookie);
>
> // Redirect the User
>
>e)> ), false));
> }
> else
> {
> divLoginError.Visible = true;
> lblLogin.Text = "* Sorry, you entered incorrect login credentials,
> please try again. *";
> }
> }
> catch (Exception ex)
> {
> throw (ex);
> }
> }
> #endregion
>
> Then in my Application_AuthenticateRequest
>
> #region Application_AuthenticateRequest
> protected void Application_AuthenticateRequest(Object sender, EventArgs> {
> // Retrieve FormsAuthentication Cookie Name
> string sCookieName = FormsAuthentication.FormsCookieName;
> // Retrieve Authentication Cookie
> HttpCookie oCookie = Context.Request.Cookies[sCookieName];
>
> // If cookie doesn't exist, exit function
> if (null == oCookie) return;
>
> // Create FormsAuthenticationTicket object
> FormsAuthenticationTicket oAuthTicket = null;
>
> try
> {
> // Retrieve FormsAuthenticationtTicket from encrypted cookie
> oAuthTicket = FormsAuthentication.Decrypt(oCookie.Value);
> // Renew the ticket if it's expired
> if (oAuthTicket.Expired) oAuthTicket =
> FormsAuthentication.RenewTicketIfOld(oAuthTicket);
> }
> catch (Exception) { return; }
>
> // If FormsAuthenticationtTicket doesn't exist, exit function
> if (null == oAuthTicket) return;
>
> // Retrieve array of Group Names from FormsAuthenticationtTicket
> string[] sGroupsArray = oAuthTicket.UserData.Split(new char[]{'|'});
>
> // Create a GenericIdentity Object
> GenericIdentity oIdentity = new GenericIdentity(oAuthTicket.Name,
> "LDAPAuthentication");
> // Create a GenericPrincipal Object from the GenericIdentity and the
> Groups Array
> GenericPrincipal oPrincipal = new GenericPrincipal(oIdentity,
> sGroupsArray);
>
> // Assign the current HTTP instance of the application to the
> GenericPrincipal object
> Context.User = oPrincipal;
>
> }
>
>
George Durzi Guest
-
George Durzi #3
Re: Stumped on FormsAuth Cookie Timing Out
I thought I'd share the solution.
my colleague pointed out to me that there is a timeout attribute for
sessions that's set in the web.config. It's overriding everything else. I
had to scroll right to see it, that's why I was missing it!
"George Durzi" <gdurzi@nospam_hotmail.com> wrote in message
news:%23o7l$vegDHA.3056@tk2msftngp13.phx.gbl...path="/"> Does anyone know if there's another timeout setting that's maybe in IIS?
>
> I've set it in web.config, machine.config, and in my code when creating my
> cookie
>
> "George Durzi" <gdurzi@nospam_hotmail.com> wrote in message
> news:u2TNNRtfDHA.2664@TK2MSFTNGP11.phx.gbl...> expire> > hi all, I am totally stumped, and I need your help.
> > My authentication cookie (using FormsAuth against Active Directory) is
> > expiring way too often (like less than 20 minutes). I have it set to> the> > in 8 hours. I'm not deploying anything to the site, so I'm not resetting> would> > application during that time.
> >
> > Here's all the code which deals with any authentication. Any feedback> > be GREATLY appreciated.
> >
> > in web.config
> > <authentication mode="Forms">
> > <forms loginUrl="login.aspx" name="adAuthCookie" timeout="480"for> > />
> > </authentication>
> >
> > User Login Function (References LDAPAuthentication class, unnecessaryResponse.Redirect(FormsAuthentication.GetRedirectU rl(txtUserName.Value.Trim(> txtUserName.Value.Trim(),> > this example)
> >
> > #region LoginUser
> > private void LoginUser()
> > {
> > // Retrieve LDAP Connect String and Domain Name
> > string sADPath =
> > ConfigurationSettings.AppSettings["LDAPConnectString"].ToString();
> > string sDomain =
> > ConfigurationSettings.AppSettings["DomainName"].ToString();
> >
> > // Instance of LdapAuthentication class
> > LDAPAuthentication oLdapAuth = new LDAPAuthentication(sADPath);
> >
> > try
> > {
> > if (true == oLdapAuth.IsAuthenticated(sDomain,>> > txtPassword.Value.Trim()))
> > {
> > // Retrieve a list of AD Groups the User is a Member of
> > string sGroups = oLdapAuth.GetGroups();
> >
> > // Create the User's FormsAuthenticationTicket
> > FormsAuthenticationTicket oAuthTicket = new
> > FormsAuthenticationTicket(1, txtUserName.Value.Trim(), DateTime.Now,
> > DateTime.Now.AddHours(8), true, sGroups);
> > // Encrypt the FormsAuthenticationTicket
> > string sTicket = FormsAuthentication.Encrypt(oAuthTicket);
> >
> > // Create the auth cookie for the User
> > HttpCookie oCookie = new
> > HttpCookie(FormsAuthentication.FormsCookieName, sTicket);
> > oCookie.Expires = DateTime.Now.AddHours(8);
> >
> > // Add the cookie to the collection
> > Response.Cookies.Add(oCookie);
> >
> > // Redirect the User
> >
> >EventArgs> > ), false));
> > }
> > else
> > {
> > divLoginError.Visible = true;
> > lblLogin.Text = "* Sorry, you entered incorrect login credentials,
> > please try again. *";
> > }
> > }
> > catch (Exception ex)
> > {
> > throw (ex);
> > }
> > }
> > #endregion
> >
> > Then in my Application_AuthenticateRequest
> >
> > #region Application_AuthenticateRequest
> > protected void Application_AuthenticateRequest(Object sender,> e)>> > {
> > // Retrieve FormsAuthentication Cookie Name
> > string sCookieName = FormsAuthentication.FormsCookieName;
> > // Retrieve Authentication Cookie
> > HttpCookie oCookie = Context.Request.Cookies[sCookieName];
> >
> > // If cookie doesn't exist, exit function
> > if (null == oCookie) return;
> >
> > // Create FormsAuthenticationTicket object
> > FormsAuthenticationTicket oAuthTicket = null;
> >
> > try
> > {
> > // Retrieve FormsAuthenticationtTicket from encrypted cookie
> > oAuthTicket = FormsAuthentication.Decrypt(oCookie.Value);
> > // Renew the ticket if it's expired
> > if (oAuthTicket.Expired) oAuthTicket =
> > FormsAuthentication.RenewTicketIfOld(oAuthTicket);
> > }
> > catch (Exception) { return; }
> >
> > // If FormsAuthenticationtTicket doesn't exist, exit function
> > if (null == oAuthTicket) return;
> >
> > // Retrieve array of Group Names from FormsAuthenticationtTicket
> > string[] sGroupsArray = oAuthTicket.UserData.Split(new char[]{'|'});
> >
> > // Create a GenericIdentity Object
> > GenericIdentity oIdentity = new GenericIdentity(oAuthTicket.Name,
> > "LDAPAuthentication");
> > // Create a GenericPrincipal Object from the GenericIdentity and the
> > Groups Array
> > GenericPrincipal oPrincipal = new GenericPrincipal(oIdentity,
> > sGroupsArray);
> >
> > // Assign the current HTTP instance of the application to the
> > GenericPrincipal object
> > Context.User = oPrincipal;
> >
> > }
> >
> >
>
George Durzi Guest



Reply With Quote

