使用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所示的初始界面。

  图12-4 页面MyPassport.aspx的初始界面



相关阅读:
解决Access出现的0x80004005问题
使用Javascript修改客户端注册表
js实现的网站首页随机公告随机公告
HTML标签tbody的用法与说明
XP升级到Win7给XP用户的10点升级建议
Word与Access数据交流技巧
仅用[]()+!等符号就足以实现几乎任意Javascript代码
在JSP中操作文件
Expandable "Detail" Table Rows
GNOME 3:无处不在的标签
Windows7中刻录ISO镜像功能刻录光盘
javascript 控制超级链接的样式代码
在模板页面的js使用办法
html 标签ID可以是变量
快速导航

Copyright © 2016 phpStudy | 皖ICP备18014864号-4