ASP.NET 验证机制

转载 2004年10月06日 14:47:00
ASP.NET 验证机制
ASP.NET 提供了一些新型的验证和授权方案,对于开发人员来说这将是和以前不同的一种方式。可喜的是ASP.NET提供的方案多样更加灵活;可惜的是这种方案是基于IIS的。我知道,有些人并不喜欢IIS,认为它容易受攻击。只是一直不喜欢ASP的方式,杂乱的HTML标记中夹杂着代码,难于维护也难于调试。现在有了新的解决方案,让我们看看。

新型ASP.NET 验证机制(下面我会用ASP.NET AP来简称)仅仅发生在调用ASP.NET引擎执行.aspx文件时发生,这也意味着当调用.asp文件时将不会调用ASP.NET引擎。所有的验证选项被放在一个XML文件中。每当你创建一个ASP.NET的Project时,你可以在Project目录下发现一个Config.web文件,在这个XML文件的, , 等标记中你可以进行设置和控制。默认的是:,这意味着ASP.NET将不使用任何的Authentication Provider,那么这种模式下,ASP.NET的底层实现和原来的ASP和IIS 4/5 将完全相同。

一个典型的Config.web的一般会是下面这样的:




我们会逐一的考察中各个可能的值,不过作为一个开放人员最后我的重点会放在”Forms”上,最后确定一下我们的平台环境:W2K ADV , VS.NET RCx , IE 6 。(VS.NET Beta2 应该也是可以的,因为写这篇文章时我的系统已从Beta 2上升级了,所以只能说:我想Beta 2也是可以的。不过我们不会讨论mode=”Cookie”的情况,这个标记只发生在ASP+的情况下,Beta 2之后的ASP.NET中应当没有了),然后我们还会使用到SDK中带的例子,因为简单所以可以是最好的一个起点。

然后我们需要简单的设置一下子,先建立一个目录C:/Inetpub/wwwroot/Security,然后Copy原来SDK的FrameworkSDK/Samples/QuickStart/aspplus/samples/security中的文件到新建的目录中(也可以直接解压缩附带文件到这个目录中)

1. Mode=”None”

这种模式是默认的,像上面提到的那样,它的行为和原来的ASP没有任何的不同。
但你使用VS.NET生成一个ASP.NET 的Project时,这种模式是默认生成的。

2. Mode=”Windows”

这种模式下,我们所访问的每一个页面都将需要通过系统的Authentication,访问者可能看到有些迷惑和Windows环境下特有的Authentication窗口 ,老实说我更喜欢看到 Window XP下的,它更可爱一些。使用这种模式意味着你可以不用额外的写任何代码,很快的实现,但我想你的商业用户不会喜欢它,而且作为一个开发人员,你无法定制它。

现在你实现这种方式将会非常的简单。

1. 在Config.web 文件中设置

2. 去IIS的控制管理界面设置你的Application属性就可以了。如下图:

3. 然后访问你的页面,你会看到这个对话框,很有趣但绝对让非专业人士迷惑。

4. 我们使用的是WindowAuth的页面。注意Mode=” Windows”,还没有先进到只用设置好Mode=就可以实现Windows Authentication了。

3525-1.jpg

结果如图:


3525-2.jpg


3. Mode=”Passport”

对于这种模式下,ASP.NET引擎会使用Microsoft Passport的Authentication机制,理论上这种模式将是最OK和省力的,不过照目前看来,想在ASP.NET下实现Passport还不是一件轻松的事情,VS.NET Beta 2的类库并没有完全实现Passport 2.1的功能(PassportIdentity). Microsoft目前唯一展示的是在MSDN上的ColdStorage例子,实现上基本基于Passport 1.4而且像使用DirectX 一样,还需要专门的一个DLL。有资料显示VS.NET RC2之后的类库已经实现了原来未实现的功能,但就目前看来缺少这方面的资料,所以把这方面的信息留给Microsoft和Passport 3.0吧,以后的时间我们会再来考察,对于Passport我深有信心,而且只要在Microsoft平台,我们都可能无法逃避面对Passport.

有关ColdStorage的Passport的信息,可以参见下面的文章:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncold/html/storageauthentication.asp

4. Mode=”Forms”

这种模式下,我想每个开放人员将获得最大的灵活性和控制,而且从现在看来,这是最实用和可行的一种方式。先看一个比较简单的例子:

1. 在Config.Web 文件中进行下面的设置:

loginUrl=”string” 表明未通过Authentication的请求将被定向到的页面,你可以自行设置。

2. 然后点击或在login.aspx 文件的Login按钮的Click的事件处理程序中写入下面的代码:

void Login_Click(Object sender, EventArgs E) {



// authenticate user: this samples accepts only one user with

// a name of new2001@msn.com and a password of 'ccBoy'



if ((UserEmail.Value == "new2001@msn.com") && (UserPass.Value == "ccBoy")) {

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

}

else {

Msg.Text = "Invalid Credentials: Please try again";

}

}
这里我们使用的硬编码,目前只允许new2001@msn.com 和 ccBoy作为登录的用户。测试时我们并不直接访问Login.aspx而是请求default.aspx这个页面,ASP.NET使用其Authentication机制,将重新定向到Login.aspx,当用户输入的信息被接受则返回最初请求的default.aspx.方式上由于我们使用dotNET的WebUI控件,更加对象化了,当判断通过FormsAuthentication 执行RedirectFromLoginPage 方法,这个函数发出Cookie,并把用户重新定向到最初请求的资源。这种方式下ASP.NET AP做了一半的工作,事实上它是被动的完成RedirectFromLoginPage

结果如图:


3525-3.jpg


下面我们修改config.web文件,使得Authentication 从config.web中获得信息和发生

1. 先设置config.web 文件

中指定访问系统资源的用户名和密码,并且可以对加密的密码进行定制和管理(建议实际应用中不要将用户名和密码放在这里面)

Passwordformat可以是“Clear”、“SHA1”、“MD5”等值。

Clear:用纯文本保存密码。用户和密码不需要进一步的转换可以直接使用和用户进行比较

SHA1:用SHA1的哈希分类保存密码。验证时将用SHA1算法对用户密码进行散列,然后同该值进行比较。

MD5:同SHA1类似,只是使用不同的算法。

当使用SHA1和MD5时还需要一个专门的API(HashPasswordForStoringInConfigFile)来执行加密,然后结果因保存到config.web文件中。具体可以参考下面的链接:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguidnf/html/cpconformsauthenticationutilities.asp



2. 然后点击或在login.aspx 文件的Login按钮的Click的事件处理程序中写入下面的代码:

void Login_Click(Object sender, EventArgs E) {



if ( FormsAuthentication.Authenticate( UserEmail.Value, UserPass.Value) )

{

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

}

else {

Msg.Text = "Invalid Credentials: Please try again";

}

}

结果和上一个相同,但这次我们把判断交给了ASP.NET AP ,我们只传递了UserEmail,UserPass两个参数,Authenticate方法将完成Authentication过程,这个用户将和我们在config.web中中设置的相同。


3525-4.jpg


MS文档《Forms Authentication Using An XML Users File》展示了另外一种获取用户名和密码的方式,这种方式为了安全,用户和密码被放在一个单独的XML文件中。具体参考下面的链接:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguidnf/html/cpconformsauthenticationutilities.asp

同样的道理你可以象你以前做得一样将用户和密码放到数据库表中,比如:

void Login_Click(Object sender, EventArgs e) {

if(Page.IsValid)

{

SQLDataReader dr;



// Connect to the database

SQLConnection cn = new SQLConnection("server=localhost;

uid=myPassport;pwd=123;database=clientPassword;");

cn.Open();

// Create a command to get the question

SQLCommand cmdQuestion = new SQLCommand("SELECT Password;

FROM Users WHERE Email = '" + UserEmail.Value + "'", cn);



cmdQuestion.Execute(out dr);

if(dr.Read())

if(dr["Password"].ToString() == UserPass.Value)

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

else

Msg.Text = "Invalid password. Please try again ";

else

Msg.Text = "Email address not found.";

}

}

再同理可以推到这个过程也还可以是调用带有商业逻辑 .NET 组件来完成,也可以是调用另外一个Web Services来完成,当从这个角度来说,已经和MS Passport 有些相同了。相比起来Microsoft的方式是重量级的。

5. Mode=”MyMode”

这将是以后我们要讨论的,ASP.NET 支持我们使用自己的AP来实现Authentication 和 Authorization 方案.这将是一种更高级的方式,事实上ASP.NET 比上一个版本更加的灵活和多样的选择。Keith Brown在11,12月的MSDN Magazine上都有讨论有关ASP.NET 的安全性问题。
综上所述,我们可以看到一个基本的有关ASP.NET Authentication的情况,其好处是明显的,但如果你不喜欢IIS其本身,那么你也将考虑使用其他的Authentication方案。Jeff Kercher 的《ASP .NET 中的身份验证:.NET 安全性指导》将可以作为你开始和深入的一个更宏观的执导。

ASP.NET 身份验证机制

ASP.NET提供了3种认证方式:windows身份验证、Forms验证和Passport验证。 windows身份验证: IIS根据应用程序的设置执行身份验证。要使用这种验证方式,在IIS中必须禁...
  • linshichen
  • linshichen
  • 2016年08月13日 10:47
  • 315

ASP.NET如何实现服务器端身份验证和客户端状态管理?(Session机制和Cookie)

Session保存在服务器端,Cookie保存在客户端
  • u013519551
  • u013519551
  • 2014年05月11日 18:34
  • 832

(二)、事件和数据回发机制

 控件事件和数据回发概述深层了解一下Button 的事件:假如我们没有对Button 注册Click 事件,则Button 会执行一遍它内部的Click 相关逻辑,并没有对Page 对象产生任何影响;...
  • kntao
  • kntao
  • 2010年09月15日 14:58
  • 1246

ASP.NET Forms 身份验证

ASP.NET Forms 身份验证 ASP.NET Forms 身份验证 概述 ...
  • apinghappy
  • apinghappy
  • 2007年07月18日 10:30
  • 1125

asp.net提供的3种认证方式

asp.net提供了3种认证方式: windows身份验证, Forms验证和Passport验证. windows身份验证: IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必...
  • niemeiquan
  • niemeiquan
  • 2012年07月30日 09:37
  • 2182

asp.net事件回传机制

 ASP.NET事件回传机制在ASP.NET里面我们最喜欢做的事情是拖动一个Button然后双击,然后输入代码就可以了。这个称之为事件回传机制,属于软件开发的体系范畴,但并不属于Web开发的范畴,因为...
  • guyuezhi1
  • guyuezhi1
  • 2011年01月06日 11:10
  • 376

asp.net 数据验证控件的使用实例

asp.net 数据控件的使用
  • hoho_12
  • hoho_12
  • 2016年04月27日 18:31
  • 2084

asp.net几种安全验证方式

ASP.NET几种安全验证方法[转] 如何运用 Form 表单认证 ASP.NET 的安全认证,共有“Windows”“Form”“Passport”“None”四种验证模式。“Windows”与“N...
  • liyong11111
  • liyong11111
  • 2007年12月18日 19:51
  • 987

Token认证机制

几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合R...
  • Tuking_Franz
  • Tuking_Franz
  • 2017年08月08日 18:00
  • 3420

ASP.NET中 RequiredFieldValidator(非空验证)的使用

1.A,运行效果返回顶部 登录 RequiredFieldValidator:非空验证 重要的属性: 1,ControlToValidate:要验证的控件 2,Err...
  • my98800
  • my98800
  • 2017年03月14日 09:07
  • 687
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET 验证机制
举报原因:
原因补充:

(最多只允许输入30个字)