ASP.NET Authentication - Form Authentication

1.概念

ASP.NET的应用最开始是部署在企业内部,登录之后才能访问。如果用户直接访问非登录页,网站会先校验用户是否已登录,如果答案是否,网站认为当前的访问是未经授权的,网站立即跳转到登录页,登录之后跳转到之前访问的页面。这种以登录表单作为认证的方式就是表单认证(Form Authentication)

表单认证是最简单的认证方式,优点是配置十分简单,缺点是所有的页面(除登录页)必须经过授权,所以这种认证方式不适合互联网应用。表单认证实际上是在客户端写如一个Cookie的值,当浏览器关闭后再次访问时就需要再次认证。当然,也可以设置为持久化的Cookie,浏览器关闭后再次访问会去查是否存在相应的Cookie,如果存在则不需要再次登录,这种情况下安全度较低,所以通常是非持久化Cookie。

2.示例

1)建立工程

2)配置文件

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="MyLogin.aspx"></forms>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>
</configuration>
这里的deny表示拒绝,user="?"表示所有的用户,所以这句话的意思是所有的用户都不可以直接访问非登录页。

3)页面

登录页

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <link href="Content/bootstrap.css" rel="stylesheet" />
</head>
<body>
    <form id="form1" runat="server">
    <div class="container">
        <br />
        <asp:Label ID="LblUsername" runat="server" Text="Username:"></asp:Label>
        <asp:TextBox ID="TboUsername" runat="server"></asp:TextBox>
        <br /><br />
        <asp:Label ID="LblPassword" runat="server" Text="Password:"></asp:Label>
        <asp:TextBox ID="TboPassword" runat="server"></asp:TextBox>
        <br /><br />
        <asp:Button ID="BtnLogin" runat="server" 
        OnClick="BtnLogin_Click" Text="Button" Width="198px" />
    </div>
    </form>
</body>
</html>

默认页

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    This is default page!
    </div>
    </form>
</body>
</html>
登录页逻辑

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace AspNetAuthentication
{
    public partial class Login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void BtnLogin_Click(object sender, EventArgs e)
        {
            if (TboUsername.Text == "admin" && TboPassword.Text == "12345")
            {
                /* 
                * 为用户名创建一个身份验证票据,并将其添加到响应的Cookie中 
                * SetAuthCookie的第一个参数为已验证的用户的名称。 
                * SetAuthCookie的第二个参数为true时代表创建持久Cookie
                *(跨浏览器会话保存的 Cookie),为false则关闭浏览器后要重新验证身份 
                */
                FormsAuthentication.SetAuthCookie(TboUsername.Text, false);
            }

            //如果URL中没有传递ReturnUrl参数,则跳转到Default.aspx,
            //否则跳转到ReturnUrl参数值指定的网页 
            Response.Redirect(string.IsNullOrEmpty(Request.QueryString["ReturnUrl"])
                ? "Default.aspx"
                : Request.QueryString["ReturnUrl"]);
        }
    }
}
3.效果

1)直接访问Default.aspx

登陆之后

相关文章

相关标签/搜索