通过 Membership用户存储验证用户凭据,实现会员控制

对于使用表单身份验证的 web 网站来说 , 用户通过访问登录页面并输入自己的凭据来登录网站。系统会将用户输入的凭据与数据库中的内容相对比。如果凭据有效,则会授予该用户一个表单身份验证票证,该票证是一个安全令牌,用以指示该访问者的身份标识和真实性。

本文实例说明怎样吧验证工作委托给已配置的 Membership 提供者。

一,数据库准备及配置Web.config

如果数据库是由aspnet_regsql创建的(运行aspnet_ressql.exe会自动生成11个以aspnet_开头的数据库),则只需要在web.config里修改连接串即可;如果想用自己定义的用户数据存储格式,则需要写一个自己的membership provider 。(默认的各类的provider是使用sql express的,需要通过重载providerName)

<membership>
      <providers>
        <remove name="AspNetSqlMembershipProvider"/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="PCLComplaintsConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="false" minRequiredPasswordLength="4" minRequiredNonalphanumericCharacters="0" passwordFormat="Hashed" maxInvalidPasswordAttempts="100" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
      </providers>
    </membership>

enablePasswordReset 设置为 true. //表示允许membership自动重设密码。

requiresQuestionAndAnswer 设置为 false.//控制锁定后不输入原密码重设密码。

maxInvalidPasswordAttempts – 指定在一个时间周期内允许用户进行的无效密码尝试的次数 , 超过该次数会锁定相应帐户。默认值为 5 。

passwordAttemptWindow //以分钟为单位指定一个时间周期 , 如果在该时间内达到指定的无效登录尝试次数 , 就会锁定帐户。默认值为 10 。

二,Membership验证原理及必要的说明

SqlMembershipProvider 通过 aspnet_Membership_GetPasswordWithFormat 存储过程获取指定用户的密码 , 从而对用户提供的凭据进行验证。我们记得, SqlMembershipProvider 以这三种格式之一保存用户密码:明文、加密、散列 (hashed) 。 aspnet_Membership_GetPasswordWithFormat 存储过程以其原始格式返回密码。对于加密密码和散列密码, SqlMembershipProvider 将传入到 ValidateUser
方法中的 password 值转换为其对应的加密或散列状态,然后将其与数据库的返回值相对比。如果数据库中保存的密码与用户输入并经过格式化处理后的密码相匹配,用户凭据就是有效的。

Membership 类依赖于成员资格提供程序与数据源通信。.NET Framework 包括一个 SqlMembershipProvider(将用户信息存储在 Microsoft SQL Server 数据库中)和一个 ActiveDirectoryMembershipProvider(允许在 Active Directory 或 Active Directory 应用程序模式 (ADAM) 服务器上存储用户信息)。还可以实现一个自定义成员资格提供程序与可由 Membership 类使用的其他类似的数据源进行通信。自定义成员资格提供程序将继承
MembershipProvider抽象类。有关更多信息,请参见 实现成员资格提供程序。

三,建立登录页面验证登录

OK,大概逻辑已经描述出来了,现在,我们先建一个登录页面。

ASP.NET 登录控件(Login、LoginView、LoginStatus、LoginName 和 PasswordRecovery)实际上封装了 Membership 类,从而提供一种便捷的用户验证机制。

login 控件自动根据 Membership 框架的用户存储来验证用户提供的凭据。

现在建一个Default.aspx 空窗体网页,然后拉入login控件。

Login 控件还有一个名为 FailureText 的属性可以用来设置自己的登陆失败提示信息。否则就根据Membership内嵌的提示“Your login attempt was not successful.Please try again”。

如果想自定义编写响应代码,有两种方法,一是添加处理 Login1_Authenticate 事件。

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
	//your code
}

另外则是触发以下button 点击事件,使触发 Membership 框架的用户存储来验证用户;

protected void LoginButton_Click(object sender, EventArgs e)
{
     // Validate the user against the Membership framework user store
     if (Membership.ValidateUser(UserName.Text, Password.Text))
     {
          // Log the user into the site
          FormsAuthentication.RedirectFromLoginPage(UserName.Text, RememberMe.Checked);
     }
     // If we reach here, the user's credentials were invalid
     InvalidCredentialsMessage.Visible = true;
}

该代码相当简单。代码首先调用了 Membership.ValidateUser 方法 , 将所提供的用户名和密码传入该方法。 . 若该方法返回为 True,则通过 FormsAuthentication 类的 RedirectFromLoginPage 方法使用户登录进网站。(如《 表单身份验证概述 》教程所述, FormsAuthentication.RedirectFromLoginPage
创建表单身份验证票证,然后将用户重定向到恰当的页面。)然而,若票证无效,会显示 InvalidCredentialsMessage 标签,告知用户其输入的用户名或密码不正确

时间: 2024-12-09 13:53:44

通过 Membership用户存储验证用户凭据,实现会员控制的相关文章

Asp.Net使用加密cookie代替session验证用户登录状态 源码分享

首先 session 和 cache 拥有各自的优势而存在.  他们的优劣就不在这里讨论了. 本实例仅存储用户id于用户名,对于多级权限的架构,可以自行修改增加权限字段   本实例采用vs2010编写,vb和c#的代码都是经过测试的:一些童鞋说代码有问题的 注意下    什么? 你还在用vs2008 vs2005? 请自行重载 带有 optional 标致的函数   童鞋们提到的 密码修改后 要失效的问题 当时没有想到 个人认为 大致方向可以> >1. 每个用户生成1个xml 里面保存随机的几

IdentityServer4 使用OpenID Connect添加用户身份验证

使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API . 本文环境:IdentityServer4 1.0  .NET Core 1.0.1 下面正式开始. 新建IdentityServer4服务端 服务端也就是提供服务,如QQ

ASP.NET中获取登录用户ID 用户身份验证(转载)

如果VS2005及VS2008中使用菜单[网站]-[ASP.NET配置]进入使用网站管理工具(WAT)的表单验证(Forms验证)方式来建立网站数据库,默认数据库名为ASPNETDB.MDF.系统将会自动建立一套系统数据表(VS2008中为11个这样的数据表),利用这个系统数据表可以快捷地进行创建新用户.角色.用户登录.修改用户口令等开发. 在后续开发过程中,需要反复使用用户ID.判断用户是否为登录用户或者是否为某一角色,这些常用操作如下: 1.获取当前登录用户ID Membership.Get

《Apache服务用户身份验证管理》RHEL6.3

1.安装apache软件包 Yum install httpd 2.启动apache服务 /etc/init.d/httpd restart 3.创建一个目录,内编辑一个index.html文件 4.给这个目录设密码(是不是很passwd文件内用户的密码文件很像) 5.编辑apache配置文件/etc/httpd/conf/httpd.conf文件(添加如下行) 6.重启apache服务 7.验证是否配置成功 8.结果 <Apache服务用户身份验证管理>RHEL6.3,码迷,mamicode

Auth验证用户验证

laravel自带了auth类和User模型来帮助我们很方便的实现用户登陆.判断. 首先,先配置一下相关参数app/config/auth.php: model 指定模型 table 指定用户表这里我只是将table从users改成user,因为我个人在数据库命名方面喜欢用单数.app/models/User.php: protected $table = 'user'; 理由同上. 可以看出,很简单甚至不用配置就能使用了,接下来看看如何使用. 以后台为例,每次访问肯定需要先判断用户是否是登陆状

【转】MVC4验证用户登录特性实现方法

在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] public class AuthorizeAttribute : FilterAttribute, IAuthorizationF

jsf服务器端验证用户输入

服务器端验证用户输入数据步骤 1 html页面上插入要输入数据控件 ? 1 2 3 4 <h:inputText size="10" value="#{commodityBean.foradd.name}"                         id="input1">                         <f:validator validatorId="input1Validator"

SpringMVC+Apache Shiro+JPA(hibernate)案例教学(四)基于Shiro验证用户权限,且给用户授权

最新项目比较忙,写文章的精力就相对减少了,但看到邮箱里的几个催更,还是厚颜把剩下的文档补上. 一.修改ShiroDbRealm类,实现它的doGetAuthorizationInfo方法 package org.shiro.demo.service.realm; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.apache.commons.lang.St

django简单用户登陆验证

一.django简单用户登陆验证   前端页面:     <div class="container  col-lg-6  col-lg-offset-4">         <br><br><br><br><br>       <form class="form-signin col-sm-4 col-lg-offset-2" action="{% url 'login' %}