快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

ASP.NET2.0应用中定制安全凭证之理论篇

阅读提要 在缺省状况下,你只能使用Visual Studio 2005的一个本机实例来治理与ASP.NET 2.0一同发行的SQL Server数据库中的安全凭证。本文将向你展示怎样用一个Web服务来包装ASP.NET 2.0提供者并通过使用一个Windows表单应用程序来治理凭证存储从而扩展这种治理能力。

  如今,无论是互联网还是企业内部局域网程序一般都要求使用定制的方法来存储和治理用户帐户和角色。为此,ASP.NET 2.0提供了一个现成的提供者模型和一个SQL Sever数据库。不幸的是,只能通过Visual Studio 2005来治理该凭证数据库且只能针对本机Web应用程序。这无疑是异常不方便而且不能广泛使用的。

  本文描述了一个超级用户可以使用的完全定制的安全治理应用程序。这个应用程序通过用一个WEB服务对ASP.NET 2.0提供者进行了包装并增加了一些功能。本文具体描述了其中的设计方式,面临的问题和包含在应用程序中的技术。同时还向你介绍了一些有用而强有力的技术,如基于接口的Web服务,基于反射的Web服务兼容性,高级C# 2.0编程,Web服务安全性和Web服务事务等。

  一、ASP.NET 2.0凭证基础结构

  基于互联网的应用程序经常不依靠Windows帐户和组,而是依靠于基于表单的认证并结合某种如SQL Server的后台定制凭证存储。为了帮助开发者免除重复设计和构建这样的解决方案,ASP.NET 2.0发行中加入了一个现成的安全凭证基础结构。ASP.NET 2.0凭证存储并不仅可用于ASP.NET应用程序,而且ASP.NET Web服务和Windows表单应用程序都能使用它来治理它们的用户凭证。另外,Windows通讯基础(编码名为Indigo)服务也能被轻易地设置来使用ASP.NET 2.0安全凭证存储。

  ASP.NET 2.0使用一提供者模型来访问和治理凭证以避免把应用程序耦合到任何特定存储上。在利用抽象提供者模型的长处的同时由程序员来开发这个应用程序。超级用户负责选择和治理特定的凭证存储。图1显示出ASP.NET 2.0安全提供者的架构。

\"\"图1.ASP.NET 2.0安全提供者模型
  Membership Provider负责治理用户,而Role Provider负责治理角色。在凭证存储中,每个用户或角色仅限于一应用程序之内。这样就答应不同应用程序使用相同的凭证存储而不会与彼此的用户名或角色相冲突。ASP.NET为SQL服务器、Windows和活动目录(见图1)等的凭证存储提供支持。为了安装SQL Server凭证数据库,可以运行aspnet_regsql.exe程序,其位置是:

<WINDOWS>/Microsoft.NET/Framework/<version>

  这个安装程序创建一个称为aspnetdb的新数据库-它包含一组应用程序的表、用户、角色以及存取这些表的存储过程。这个SQL Server数据库是运用最新的安全技术经过精心设计的。另外,ASP.NET 2.0还提供一套相应于提供者的类(图1)。

  使用哪个提供者的信息被保存在应用程序的配置文件(App.Config或Web.Config)中。你几乎不需要直接与特定的提供者进行交互;而是,存在两个静态助理类:Membership和Roles-它们负责从配置文件中读取使用哪个提供者。默认的提供者(即当没有指定提供者时)就是SQL Server。Membership类(列表1)答应你创建和删除用户,检索关于用户的信息并观看口令策略。

  列表1: Membership助理类

[Serializable]
public class MembershipUser{
 public virtual bool ChangePassword(string oldPassword,string newPassword);
 public virtual string GetPassword(string passwordAnswer);
 public virtual string ResetPassword(string passwordAnswer);
 public virtual bool UnlockUser();
 //其它成员
}
public static class Membership{
 public static string ApplicationName{get;set;}
 public static MembershipUser CreateUser(string username, string password);
 public static MembershipUser CreateUser(string username, 
 string password, string email, string passwordQuestion,
 string passwordAnswer, bool isApproved, out MembershipCreateStatus status);
 public static bool DeleteUser(string username,bool deleteAllRelatedData);
 public static MembershipUser GetUser(string username);
 public static void UpdateUser(MembershipUser user);
 public static bool ValidateUser(string username,string password);
 public static bool EnablePasswordReset{get;}
 public static bool EnablePasswordRetrieval{get;}
 //其它成员
}
  例如,为了在\"MyApp\"应用程序中创建一新用户,你仅需如下编码: 

Membership.ApplicationName = \"MyApp\";
Membership.CreateUser(\"MyUser\",\"MyPassword\",...);
  Roles类答应你创建和删除用户角色,从角色中添加或删除用户,检索用户的角色会员信息以及验证角色会员。下面是该类的定义:

public static class Roles{
 public static string ApplicationName{get;set;}
 public static void CreateRole(string roleName);
 public static bool DeleteRole(string roleName, bool throwOnPopulatedRole);
 public static void AddUserToRole(string username, string roleName);
 public static void RemoveUserFromRole(string username, string roleName);
 public static string[] GetAllRoles();
 public static string[] GetRolesForUser(string username);
 public static string[] GetUsersInRole(string roleName);
 public static bool IsUserInRole(string username, string roleName);
 //其它成员
}
  例如,要把角色\"Manager\"添加到应用程序\"MyApp\"上,你可以如下编码:

Roles.ApplicationName = \"MyApp\";
Roles.CreateRole(\"Manager\");

本新闻共2页,当前在第1页  1  2  

本新闻共2页,当前在第1页  1  2  


返回类别: 教程
上一教程: 单元测试辅助类
下一教程: Microsoft 中间语言(MSIL)

您可以阅读与"ASP.NET2.0应用中定制安全凭证之理论篇"相关的教程:
· ASP.NET2.0应用中定制安全凭证之实践篇
· ASP.NET2.0+SQL Server2005构建多层应用
· 这是asp.net的第二个应用(四)
· 这是asp.net的第二个应用(五)
· 一个用c#写的扫描asp源码漏洞的应用程序(续)
    微笑服务 优质保证 索取样品