Passport验证已经成为ASP.NET中很重要的一部分,它能够用来验证访问网站或应用程序的用户是否为合法用户。如果用户没有登录或者不是合法用户,Passport验证会提供集中验证方式验证用户的合法性。 本实例介绍如何使用ASP.NET中的Passport验证登录网站或应用程
Passport验证已经成为ASP.NET中很重要的一部分,它能够用来验证访问网站或应用程序的用户是否为合法用户。如果用户没有登录或者不是合法用户,Passport验证会提供集中验证方式验证用户的合法性。
本实例介绍如何使用ASP.NET中的Passport验证登录网站或应用程序的用户是否合法,主要使用名字控件System.Web.Security中的类PassportIdentity实现网站或应用程序的用户的Passport验证。
1.下载Passport SDK
如果ASP.NET应用程序需要使用.NET中Passport验证,则需要安装Passport SDK。它可以从微软官方网站上获取,获取的地址如下:
http://www.microsoft.com/downloads/details.aspx?FamilyID=79430a63-c425-46a3-b4db-45f118986246&DisplayLang=en#filelist
下载并安装Passport SDK之后,ASP.NET应用程序才可以使用Passport验证。
2.创建新ASP.NET应用程序
在Visual Studio .NET 2003集成开发环境中创建新的ASP.NET Web应用程序,命名为Example_12_2。
3.配置应用程序的web.config文件
打开应用程序Example_12_2的web.config文件,把文件中的配置节“authentication”修改为Passport验证方法。程序代码如下:
<!-- 身份验证
此节设置应用程序的身份验证策略。可能的模式是 "Windows"、"Forms"、
"Passport"和"None"
"None" 不执行身份验证。
"Windows" IIS 根据应用程序的设置执行身份验证(基本、简要或集成 Windows)。
在 IIS 中必须禁用匿名访问。
"Forms" 您为用户提供一个输入凭据的自定义窗体(Web 页),然后在您的应用程序中验证他们的身份。用户凭据标记存储在 Cookie 中。
"Passport" 身份验证是通过 Microsoft 的集中身份验证服务执行的,它为成员站点提供单
独登录和核心配置文件服务。
-->
<authentication mode="Passport" />
4.设置应用程序的Passport验证
由于应用程序中的Passport验证使用了XML文件UserList.xml,因此先介绍该文件的结构。文件UserList.xml存放用户数据,每个用户的数据使用XML结点“<User></User>”标识。该文件的部分数据代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<Users>
<User>zhengyaod</User>
<User>myname</User>
……
</Users>
打开应用程序Example_12_2的Global.asax文件,并在该文件中添加Passport验证的验证方法PassportAuthentication_Authenticate(Object sender,PassportAuthenticationEventArgs e)。该方法验证用户的登录信息是否在用户数据文件UserList.xml中存在,如果存在则表示该用户合法,否则是不合法的。方法 PassportAuthentication_Authenticate()的程序代码如下:
protected void PassportAuthentication_Authenticate(Object sender,PassportAuthenticationEventArgs e)
{ //获取用户的身份标识
if(e.Identity != null && (e.Identity).IsAuthenticated == true)
{ //使用Passport验证的身份标识
PassportIdentity pIdent = e.Identity;
//获取用户的用户名称
string tempPV = pIdent.HexPUID;
//打开XML文件UserList.xml
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("UserList.xml");
//验证用户是否合法
foreach(XmlNode node in xmlDoc.SelectNodes("//User"))
{
if(node.InnerText == tempPV)
{ //如果用户合法,转向合法页面
Server.Transfer("Default.aspx");
}
}
}
}
5.设计页面的Passport验证
把应用程序Example_12_2中的默认页面WebForm1.aspx重命名为MyPassport.aspx。该页面不需要添加任何服务器端控件,因此页面设计比较简单,所以不再介绍它的界面设计方法。页面MyPassport.aspx的HTML设计代码如下:
<%@ Page language="c#" Codebehind="MyPassport.aspx.cs"
AutoEventWireup="false" Inherits="Example_12_2.MyPassport" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Example_12_2:使用ASP.NET中的Passport验证</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server"></form>
</body>
</HTML>
由于页面MyPassport.aspx使用了.NET Passport验证,因此需要在该页面中引入名字空间System.Web.Security和System.Security.Principal等。引入名字空间的程序代码如下:
using System.Security;
using System.Security.Principal;
using System.Web.Security;
using System.Security.Policy;
页面MyPassport.aspx使用函数UserLogin()验证用户是否登录。如果用户已经登录网站或应用程序,则显示相应操作,否则在页面MyPassport.aspx显示Passport验证登录入口。函数UserLogin()的程序代码如下:
private void UserLogin()
{ //使用Passport验证的身份ID
PassportIdentity pIdent = (PassportIdentity)Context.User.Identity;
if(pIdent.IsAuthenticated == true)
{ //显示用户登录成功信息
Response.Write("用户登录成功!!!");
Response.Write("<br>" + "用户ID为:" + pIdent.HexPUID);
}
else
{ //显示用户登录入口
Response.Write("用户还没有登录,请单击下面的登录按钮:");
Response.Write(
pIdent.LogoTag2(null,600,true,null,1033,false,null,0,false));
}
}
运行效果
设置页面MyPassport.aspx为应用程序的起始页面。按F5键运行,出现如图12-4所示的初始界面。