劳力士停止在FormsAuthentication工作

时间:2014-03-28 09:17:10

标签: c# asp.net .net authentication webforms

从{。1}}中的.net版本3.5升级到4.5个角色后停止工作。用户已通过身份验证,但框架似乎没有获取角色信息,并且拒绝用户访问管理员内容。

以下是登录用户的代码:

FormsAuthentication

在Global.asax中,此代码使用角色信息更新当前用户。当我调试时,我可以看到角色是admin:

        int timeout = int.Parse(ConfigurationManager.AppSettings["loginTimeoutMinutes"]);

        HttpContext.Current.Session.Timeout = timeout;

        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
            1,
            username,
            DateTime.Now,
            DateTime.Now.AddMinutes(timeout),
            false,
            roles,
            FormsAuthentication.FormsCookiePath);

        string hash = FormsAuthentication.Encrypt(ticket);
        HttpCookie cookie = new HttpCookie(
            FormsAuthentication.FormsCookieName, // Name of auth cookie
            hash); // Hashed ticket

        if (ticket.IsPersistent) cookie.Expires = ticket.Expiration;

        HttpContext.Current.Response.Cookies.Add(cookie);

这是主web.config的身份验证位:

    protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        if (HttpContext.Current.User != null)
        {
            if (HttpContext.Current.User.Identity.IsAuthenticated &&
                HttpContext.Current.User.Identity is FormsIdentity)
            {

                FormsIdentity id = (FormsIdentity) HttpContext.Current.User.Identity;
                FormsAuthenticationTicket ticket = id.Ticket;

                string userData = ticket.UserData;
                string[] roles = userData.Split(',');
                HttpContext.Current.User = new GenericPrincipal(id, roles);
            }
        }
    }

登录后,用户将被重定向到包含以下 <roleManager enabled="true"></roleManager> <authentication mode="Forms"> <forms name="theForm" loginUrl="/login.aspx"/> </authentication> 的文件夹中的文件:

web.config

当我调试一切看起来很好,但用户被拒绝访问管理页面。

我错过了什么吗?感谢帮助。 (我知道之前已经问过这个问题,但是我已经在stackoverflow上阅读了大约50个问题/答案并尝试了所有的建议而没有找到答案)

(另一个奇怪的是,在升级.net版本之后我不得不添加

<?xml version="1.0"?>
<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <authorization>
      <allow roles="admin" />
      <deny users="*"/>
    </authorization>
  </system.web>
</configuration>

到web.config以获取重定向以转到正确的登录页面。)

1 个答案:

答案 0 :(得分:0)

Stackoverflow的好人!

我使用了错误的EventHandler。要使用的是PostAuthenticateRequest

我真诚地向读了这个问题的十八个人道歉,我浪费了他们的时间。