一起谈.NET技术,ASP.NET身份验证机制membership入门——项目

  前面说了很多关于membership的内容,感觉内容有点凌乱,内容都是一个个知识点,下面我们通过一个小的项目,来把所有的相关内容串一下。

  首先描述一下需求:

  我们要做一个最简单的网站。有三类用户:匿名用户,员工,管理员,网站结构如下:

    

  admin目录下的页面只允许admin角色的用户访问,employee目录下的页面只允许emp角色的用户访问。Default.aspx允许所有用户访问。Login.aspx实现登陆功能,regUser.aspx实现注册用户功能。

  1.首先我们新建一个网站

  2.进入C:\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx这个目录下,找到aspnet_regsql.exe,运行,并一路下一步,得到aspnetdb数据库

  3.打开网站,打开web.config文件,配置membership:

<membership defaultProvider="mySqlMembershipProvider">
      <providers>
        <add name="mySqlMembershipProvider"
            type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
            connectionStringName="ConnectionString"
            enablePasswordRetrieval="false" 
            enablePasswordReset="true" 
            requiresQuestionAndAnswer="false" 
            applicationName="TestMembership" 
            requiresUniqueEmail="true" 
            passwordFormat="Hashed" 
            maxInvalidPasswordAttempts="5" 
            minRequiredPasswordLength="6" 
            minRequiredNonalphanumericCharacters="0" 
            passwordAttemptWindow="10" 
            passwordStrengthRegularExpression=""/>
      </providers>
    </membership>

  然后继续添加连接字符串:

<connectionStrings>
  <add name="ConnectionString" connectionString="server=.;uid=sa;pwd=sa;database=aspnetdb"/>
</connectionStrings>

  4.接着配置roleManager:

<roleManager enabled="true" defaultProvider="myAspNetSqlRoleProvider">
  <providers>
    <add name="myAspNetSqlRoleProvider"
         connectionStringName="ConnectionString"
         applicationName="TestMembership" 
         type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
</roleManager>

  5.接着在项目中添加两个页面,一个首页Default.aspx一个登陆页面Default.aspx,随后继续添加forms身份验证的配置:

<authentication mode="Forms">
    <forms loginUrl="Login.aspx"
           protection="All"
           timeout="30"
           name=".ASPXAUTH" 
           path="/"
           slidingExpiration="true"
           defaultUrl="Default.aspx"
           cookieless="UseDeviceProfile"/>
</authentication>

  现在需要添加两种角色employee、admin,添加角色的方法很简单方法有很多,我们介绍最简单的一种:新建一个页面,在这个页面的page_load事件当中加入如下代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        Roles.CreateRole("admin");
        Roles.CreateRole("employee");
    }

  浏览一下这个页面就添加了这俩角色。

      添加完角色,就该实现注册用户功能了。

      regUser页面代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="regUser.aspx.cs" Inherits="regUser" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <table border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td>用户名:</td>
        <td><asp:TextBox runat="server" ID="txtName"></asp:TextBox></td>
    </tr>
    <tr>
        <td>密码:</td>
        <td><asp:TextBox runat="server" ID="txtPwd" TextMode="Password"></asp:TextBox></td>
    </tr>
    <tr>
        <td>邮箱:</td>
        <td><asp:TextBox runat="server" ID="txtEmail"></asp:TextBox></td>
    </tr>
    <tr>
        <td colspan="2"><asp:Button runat="server" ID="btnReg" Text="注册" 
                onclick="btnReg_Click" /></td>
    </tr>
    </table>
    </form>
</body>
</html>

这是regUser.aspx.cs文件中的代码

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class regUser : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e){}
    protected void btnReg_Click(object sender, EventArgs e)
    {
        /* 这里仅仅是为了演示Membership功能,所以验证、错误捕获等在此省略
         * 由于我们在web.config中将requiresQuestionAndAnswer设为false
         * 所以在这里只需要调用3个参数的重载即可
         * */
        Membership.CreateUser(txtName.Text, txtPwd.Text, txtEmail.Text);
        //将刚刚注册的用户添加Employee角色
        Roles.AddUserToRole(txtName.Text, "employee");
        //注册成功,将用户跳转到默认页面
        //所谓默认页面,就是在前面配置时forms节点下defaultUrl指定的页面
        FormsAuthentication.RedirectFromLoginPage(txtName.Text, false);
    }
}

  ok,注册功能已经差不多了,现在我们开始完成登录页面。

  打开Login.aspx页面,加上如下代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <table border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td>用户名:</td>
        <td><asp:TextBox runat="server" ID="txtName"></asp:TextBox></td>
    </tr>
    <tr>
        <td>密码:</td>
        <td><asp:TextBox runat="server" ID="txtPwd" TextMode="Password"></asp:TextBox></td>
    </tr>
    <tr>
        <td colspan="2"><asp:Button runat="server" Text="登录" ID="btnLogin" 
                onclick="btnLogin_Click" /></td>
    </tr>
    </table>
    </form>
</body>
</html>

 Login.aspx.cs代码如下:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

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 (Membership.ValidateUser(txtName.Text, txtPwd.Text))
        {
            //登录成功向浏览器写入身份票据
            FormsAuthentication.SetAuthCookie(txtName.Text, false);
            //跳转回最初请求的url或是默认url
            //注:所谓最初请求的url是指:如果我未经登录,
            //直接访问admin/admin.aspx这个页面,那么将会跳转到该登录页面
            //如果登录成功,则此方法将会以登录用户的身份跳转回
            //admin/admin.aspx页面
            FormsAuthentication.RedirectFromLoginPage(txtName.Text, false);
        }
        else
        {
            ClientScript.RegisterStartupScript(this.GetType(), "", "alert('用户名或密码错误!');", true);
        }
    }
}

  好了,注册和登录都已经完成了,剩下的任务就是配置访问权限这一项了,其实很简单:在admin和employee目录下分别添加两个web.config文件

admin目录下的web.config内容如下:

<configuration>
    <appSettings/>
    <connectionStrings/>
    <system.web>
      <authorization>
        <allow roles="admin"/>
        <deny users="*"/><!--*代表的是所有用户-->
      </authorization>
    </system.web>
</configuration>

  表示所有具有admin角色的用户允许访问,除此之外全部拒绝访问。

employee目录下的web.config内容如下:

<configuration>
    <appSettings/>
    <connectionStrings/>
    <system.web>
      <authorization>
        <allow roles="employee"/>
        <deny users="*"/>
      </authorization>
    </system.web>
</configuration>

  同admin目录下的配置,*是通配符,代表所有用户,?代表所有匿名用户 

  好了,到这里,我们实现的功能有:登录,注册,权限控制。一个网站所需要的功能基本上都已经实现了,项目有点简单,但是功能齐全。一般来说80%的站点使用membership就足够了。好了,本项目到此结束。

时间: 2024-11-03 21:40:29

一起谈.NET技术,ASP.NET身份验证机制membership入门——项目的相关文章

ASP.NET身份验证机制membership入门项目

前面说了很多关于membership的内容,感觉内容有点凌乱,内容都是一个个知识点,下面我们通过一个小的项目,来把所有的相关内容串一下. 首先描述一下需求: 我们要做一个最简单的网站.有三类用户:匿名用户,员工,管理员,网站结构如下: admin目录下的页面只允许admin角色的用户访问,employee目录下的页面只允许emp角色的用户访问.Default.aspx允许所有用户访问.Login.aspx实现登陆功能,regUser.aspx实现注册用户功能. 1.首先我们新建一个网站 2.进入

asp.net 身份验证机制实例代码_实用技巧

ASP.NET提供了3种认证方式:windows身份验证.Forms验证和Passport验证. windows身份验证: IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问. Forms验证:用Cookie来保存用户凭证,并将 未经身份验证的用户重定向到自定义的登录页. Passport验证:通过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登录和核心配置文件服务. 关于这三种验证方式的配置,推荐一篇文章:http://www.jb51.ne

asp.net身份验证和授权

asp.net 今天闲着无聊.想起来了ASP.NET身份验证.感觉良好.贴出下列代码:login.aspx HTML代码   1<%@ Page language="c#" Codebehind="02Login.aspx.cs" AutoEventWireup="false" Inherits="身份验证._02Login" %> 2<!DOCTYPE HTML PUBLIC "-//W3C//D

asp.net身份验证方式介绍_实用技巧

windows身份验证: IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问. Forms验证:用Cookie来保存用户凭证,并将 未经身份验证的用户重定向到自定义的登录页. Passport验证:通过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登录 和核心配置文件服务. 一. 配置windows身份验证 1)配置IIS设置 2)设置Web.config <system.web> <authentication mode = &quo

密码学-在一方不可信的时候如何设计身份验证机制?

问题描述 在一方不可信的时候如何设计身份验证机制? 我是想实现这样一种情况,就是有TrustZone的系统中两个主体A和B A是确定可信的(在secure world, 从硬件上有隔离),而B是一个normal world的普通主体,可能会被攻击.篡改或者假冒, 这样的情况下如下如何去验证和A进行通信的B到底是不是原本的那个B呢(可以涉及系统的手段,不一定非得用密码学)? 不过还是感觉涉及到密码学的东西,但是B显然不能存有密钥,因为密钥可能泄露,但是事先双方约定的话,除了密钥之外不知道约定什么可

求教。。QQ身份验证机制是怎么实现的

问题描述 哪位大神知道腾讯QQ的身份验证机制是怎么实现的???知道的话请告诉小弟一下,感激不尽啊!!!

谈谈Asp.net身份验证、授权

1.Asp.net是依存于IIS的一个服务,说到Asp.net的安全相关的话题当然要有一个整体上的思路:IIS接收->IIS验证->IIS授权--->ASP.net验证--->Asp.net授权--->资源返回给用户 IIS从网络上接收到一个HTTP WEB请求可以使用SSL技术来保证服务器的身份,此外SSL也可以提供一个安全通道来保护客户端和服务器端的机密数据的传送.IIS使用基本 摘要式 或者其它的方式验证用户,如果网站中的大部分内容不需要验证就可以设定为匿名验证.验证之

调用SQL SERVER数据库存储过程实现ASP用户身份验证

server|存储过程|数据|数据库 在我们编写用户身份验证程序中,很容易用ASP调用SQL语句来检索数据表中是否有条件相符的记录,然后再用ASP进行相关处理. 条条道路通罗马!当然,我们也可以用SQL SERVER数据库的存储过程来轻松实现这个功能.虽然相对而言较复杂,但其效率的提升是很明显的,因为存储过程是在数据库中已经编译好的一段程序,我们只需用ASP将其所用的各种参数正确传递就行了. 本文也主要是想通过一个简单的事例,向大家介绍一下如何在ASP中调用带参数的存储过程.希望大家能从中得到更

利用SQLSERVER存储过程实现ASP用户身份验证

server|sqlserver|存储过程 在我们编写用户身份验证程序中,很容易用ASP调用SQL语句来检索数据表中是否有条件相符的记录,然后再用ASP进行相关处理. 条条道路通罗马!当然,我们也可以用SQL SERVER数据库的存储过程来轻松实现这个功能.虽然相对而言较复杂,但其效率的提升是很明显的,因为存储过程是在数据库中已经编译好的一段程序,我们只需用ASP将其所用的各种参数正确传递就行了. 本文也主要是想通过一个简单的事例,向大家介绍一下如何在ASP中调用带参数的存储过程.希望大家能从中