ASP.NET的身份验证模块如何工作?

时间:2011-04-18 03:12:21

标签: asp.net authentication

我无法说清楚asp.net的身份验证是如何工作的,我根据帮助文档和google设置了以下配置:

<configuration>
    <!-- 

    Login.aspx and the random_code_img.aspx does not need authentication 
    But excluding the above files,all the page are protected.
    -->
    <location path="Login.aspx">

    </location>
    <location path="random_code_img.aspx">
        <system.web>
            <authorization>
                <allow users="*"/>
            </authorization>
        </system.web>
    </location>
    <system.web>
        <authorization>
            <deny users="?"/>
        </authorization>
        ..........
    </system.web>
</configuration>

现在在login.aspx.cs:

在loginButton_click方法中:

if (Membership.ValidateUser(username, password))
{
  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
    username,
    DateTime.Now,
    DateTime.Now.AddMinutes(30),
    isPersistent,
    "",
    FormsAuthentication.FormsCookiePath);

  // Encrypt the ticket.
  string encTicket = FormsAuthentication.Encrypt(ticket);

  // Create the cookie.
  Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

  // Redirect back to the protected URL.
        Session["havelogined"] = "1";
        HttpContext.Current.Response.Write("<script>location.replace('Default.aspx')</script>");
}
else{
//do something
}

然而在login.aspx中,输入名称和密码后,再单击登录按钮,我被重定向到浏览器地址栏中的Default.aspx,但是我看不到默认的内容。 aspx,我只是看到了:


访问被拒绝。 描述:访问提供此请求所需的资源时发生错误。可能未配置服务器以访问请求的URL。

错误消息401.2 ................


所以我想知道asp.net的身份验证如何知道我是否已登录?我可以用一些可读信息重新发布这些通知吗?

此外,

    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>

这里的“用户”是什么意思?

我认为他们不是我数据库中的注册用户。

2 个答案:

答案 0 :(得分:1)

HTTP 401.2状态代码对应于“未配置身份验证方法”。我需要更多信息来确认。如果我不得不猜测我会说你错过了&lt; forms&gt; &lt; authentication&gt;下的标记标签

如果您还没有找到这篇文章,可以尝试使用此链接来讨论如何完全设置表单身份验证 - http://msdn.microsoft.com/en-us/library/xdt4thhy.aspx

<allow users="*"/> 

表示允许所有用户。本质上,它指示ASP.NET允许所有用户(经过身份验证或未经身份验证)访问random_code_img.aspx

BTW:

<deny users="?"/>  

表示不允许未经身份验证的用户。

希望这有帮助。

答案 1 :(得分:0)

在loginButton_click方法中,验证用户后,您只需使用

即可

FormsAuthentication.RedirectFromLoginPage

有关更多信息和示例,请参见此处。 http://msdn.microsoft.com/en-us/library/ka5ffkce.aspx