• VS2003中实现身份验证的探索经验


    转载请注明出处!!

    这几天正在弄ASP.NET, 小试了一下身份验证的实现方法, 在这分享一下.,菜鸟的文章,高手可以略过。

    首先,看看基于Forms的验证方式。通过测试,我发现这个验证方式是基于整个WEB应用程序的,也就是基于某个虚拟目录的,一旦通过验证可以访问对应的整个虚拟目录下的所有网页,否则会跳转到默认登陆页面。知道了这个原理,我们就知道这样只能实现目录访问控制,无法实现不同用户访问不同的网页。

    这里不涉及数据库读取用户的操作,自己虚拟几个默认用户。

    这里先实现虚拟目录访问控制。(这部分MSDN有详细的论述,我也是参考MSDN的)

    在 Web.config 文件中配置安全设置

    应用程序必须被配置成使用基于窗体的身份验证,将 <authentication> 设置为 Forms 并且拒绝匿名用户访问。下面的示例说明如何在所需应用程序的 Web.config 文件中完成此配置:

    1. 插入 <Forms> 标记,并填入相应的属性。(有关这些属性的更多信息,请参考 MSDN 文档或快速入门文档,这些文档在 参考 一节中列出。)复制以下代码,然后在“编辑”菜单中单击“粘贴为 HTML”,将该代码粘贴到文件的 <authentication> 部分:
    <authentication mode="Forms">
       <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
       protection="All" path="/" timeout="30" />
    </authentication> 
    					
    2. <authorization> 部分中拒绝匿名用户的访问(如下所示):
    <authorization>
       <deny users ="?" />
       <allow users = "*" />
    </authorization>
    					
    配置了应用程序后,需要提供一个登录页。下面的示例显示了一个简单的登录页。示例在运行时要求 Default.aspx 页。未授权的请求被重定向到登录页 (Login.aspx),此页显示一个简单的窗体,提示用户输入电子邮件地址和密码。(使用 Username="jdoe@somewhere.com" 和 Password="password" 作为凭据。)

    验证了凭据后,应用程序调用下列内容:

    FormsAuthentication.RedirectFromLoginPage(UserEmail.Value, PersistCookie.Checked);
    C#

    这将用户重定向回当初请求的 URL。不想执行重定向的应用程序可以或者调用 FormsAuthentication.GetAuthCookie 来检索 Cookie 值,或者调用 FormsAuthentication.SetAuthCookie 将正确加密的 Cookie 附加到输出的响应中。对于提供嵌入在包含页中的登录 UI 的应用程序,或者想要更多地控制用户被重定向到的位置的应用程序而言,这些方法很有用。身份验证 Cookie 既可以临时又可以永久(“持久”)。临时 Cookie 只在当前浏览器会话期间保持。当浏览器关闭时,临时 Cookie 随即丢失。永久 Cookie 则被浏览器保存,并在浏览器会话间回发,直到被用户显式删除。

    注销方法:

          FormsAuthentication.SignOut();
          Response.Redirect("login.aspx");
    这样就完成了一个访问控制的应用程序。

    接下来我要实现不同的用户跳转到不同的页面。

    首先,要在登陆时创建cookies,然后在用户页面认证cookies是否存在,存在则可以访问否则跳转到登陆页面。这样可以不用基于FORMS的验证。

    点击登陆按钮的事件代码:

      private void Button1_Click(object sender, System.EventArgs e)
      {
       if(UserName.Text=="default" && UserPassword.Text=="default")
       {//判断用户

        HttpCookie mycookie2=new HttpCookie("MyTestDefault","MyTestDefault");
        if(PersistCookie.Checked)//判断是否保存cookies
         mycookie2.Expires = new DateTime(2007,10,1);
        mycookie2.Path = FormsAuthentication.FormsCookiePath;
        Response.Cookies.Add(mycookie2); 
        Response.Redirect("default.aspx");
       }
       else
        Label4.Text="用户名或密码无效!";
      }

     

    用户页面判断:

      private void Page_Load(object sender, System.EventArgs e)
      {
       if(Request.Cookies["MyTestDefault"]==null)
        Response.Redirect("Login.aspx",true);
       Label1.Text = "这是另一个登入界面,欢迎你: ";
      }

    登出:

       Response.Cookies["MyTestDefault"].Expires = DateTime.Now.AddYears(-1); //使cookies失效
       Response.Redirect("Login.aspx",false);

    如果有其它用户,则在登陆页面添加判断语句,并在相应的用户页面添加cookies检测的语句。

    这样就实现了不同用户跳转到不同页面了。

  • 相关阅读:
    Redux
    React-Router常见API
    webpack的plugin原理
    Kubernetes核心原理笔记
    阿里云证书过期时间监测
    DRF
    一个TCP可以发送多少个请求
    jenkins exporter(收集jenkins构建结果)
    Kubernetes SDN
    Django REST framework API认证(包括JWT认证)
  • 原文地址:https://www.cnblogs.com/absolute8511/p/1649698.html
Copyright © 2020-2023  润新知