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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:
阅读提要 在缺省状况下,你只能使用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");
二、管理凭证存储

  如果你选择使用Windows或活动目录来存储你的应用程序的用户和角色,那么你需要使用相应于这些存储的工具来管理,例如计算机控制面板小程序或活动目录工具。其实,真正的问题在于如何管理存储在SQL Server中的凭证。为此,你可以使用Visual Studio 2005和一个Web浏览器,甚至不需要安装IIS。在一ASP.NET Web工程中,从"Website"菜单下选择"ASP.NET配置"。这将使得Visual Studio宿主一个Web服务器,打开一可用的端口并且导航到一套管理页面(见图2)。这些管理页面修改该Web应用程序配置文件并且也可以管理凭证存储(当不选择Windows认证时)。当使用Visual Studio 2005时,你首先需要选择认证类型。你可以选择Windows或表单认证(互联网存取)。如果你选择表单认证,你还可以执行下列操作:

  ·启动或取消基于角色的安全

  ·创建和删除角色

  ·创建和删除用户

  ·检索一用户的细节

  ·设置一用户的状态

  ·给用户赋于某角色

  ·从角色中删除用户


图2.ASP.NET Web应用程序管理页面

  既然SQL Server是ASP.NET 2.0提供的唯一的企业级定制凭证存储,你可以单独使用Visual Studio 2005驱动的管理页面来管理aspnetdb数据库,而不用任何其它存储。

   三、内置功能的不足

  对于Visual Studio 2005驱动的管理页面存在一些重要缺点:第一,你需要Visual Studio 2005。应用程序或系统超级用户可能没有Visual Studio 2005,更不用说如何使用它了。缺省地,该管理页面使用一斜杠(/)来管理应用程序命名,并且没提供任何修改方法。第二,不可能存在远程存取-应用程序和Visual Studio 2005必须共存,这样Visual Studio 2005才能存取应用程序的配置文件。第三,基于浏览器的用户接口也不很友好-你需要不断点击Back按钮,而且用户接口反映相当迟钝。另外,许多超级用户可能想使用的特征无法经由页面管理来实现,这就脱离了底层提供者类所支持的特性这一事实。这种方式还不能实现的方面有: 

  ·更新大多数用户帐户细节

  ·检索、改变、重置一用户的口令

  ·检索当前在线用户数目信息

  ·能够从一次操作的一个角色中删除全部用户

  ·检索关于口令管理策略(例如长度、重置策略、口令类型等)的信息

  ·测试用户凭证

  ·验证用户角色身份

  而且,还有其它的超级用户可能想要的特征也得不到支持。这些特征包括能够检索数据库所有应用程序列表,能够从一应用程序中删除所有的用户,能够从一应用程序中删除所有的角色,能够删除一应用程序(和它的所有相联系的用户和角色),能够删除所有的应用程序。总之,尽管ASP.NET 2.0提供了一个第一流的全面的凭证管理,然而它仅提供了一些原始的管理选项,一般的实际超级用户是不会使用它的。


图3.凭证管理器应用程序的一个快照

  这一切促使我自己来开发一个定制的客户端凭证管理器应用程序来弥补这些不足。图3显示该程序的一个快照。后面的部分将介绍我是如何设计和构建该凭证管理器的。















本文转自朱先忠老师51CTO博客,原文链接: http://blog.51cto.com/zhuxianzhong/59331,如需转载请自行联系原作者


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
2月前
|
C# Android开发 iOS开发
2025年全面的.NET跨平台应用框架推荐
2025年全面的.NET跨平台应用框架推荐
105 23
|
4月前
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
65 5
|
4月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
4月前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
195 2
|
6月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
233 6
|
6月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
244 10
|
7月前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
120 0
|
7月前
|
开发者 API Windows
从怀旧到革新:看WinForms如何在保持向后兼容性的前提下,借助.NET新平台的力量实现自我进化与应用现代化,让经典桌面应用焕发第二春——我们的WinForms应用转型之路深度剖析
【8月更文挑战第31天】在Windows桌面应用开发中,Windows Forms(WinForms)依然是许多开发者的首选。尽管.NET Framework已演进至.NET 5 及更高版本,WinForms 仍作为核心组件保留,支持现有代码库的同时引入新特性。开发者可将项目迁移至.NET Core,享受性能提升和跨平台能力。迁移时需注意API变更,确保应用平稳过渡。通过自定义样式或第三方控件库,还可增强视觉效果。结合.NET新功能,WinForms 应用不仅能延续既有投资,还能焕发新生。 示例代码展示了如何在.NET Core中创建包含按钮和标签的基本窗口,实现简单的用户交互。
112 0
|
7月前
|
Java Spring 自然语言处理
Spring 框架里竟藏着神秘魔法?国际化与本地化的奇妙之旅等你来揭开谜底!
【8月更文挑战第31天】在软件开发中,国际化(I18N)与本地化(L10N)对于满足不同地区用户需求至关重要。Spring框架提供了强大支持,利用资源文件和`MessageSource`实现多语言文本管理。通过配置日期格式和货币符号,进一步完善本地化功能。合理应用这些特性,可显著提升应用的多地区适应性和用户体验。
70 0
|
7月前
|
开发者 C# Android开发
Xamarin 与 .NET:解锁现代化移动应用开发的超级武器——深入探讨C#与.NET框架如何赋能跨平台应用,实现高效编码与卓越性能
【8月更文挑战第31天】Xamarin 与 .NET 的结合为开发者提供了强大的平台,用于构建现代化移动应用。通过 C# 和 .NET 框架,Xamarin 可以实现一次编写、多平台运行,覆盖 iOS、Android 和 Windows。这种方式不仅节省了开发时间和成本,还保证了应用的一致性和高质量。Xamarin 是一个开源框架,专为跨平台移动应用开发设计,允许使用 C# 语言和 .NET 核心库构建原生应用,并访问各平台特定功能。微软维护的 Xamarin 是 Visual Studio 生态系统的一部分,极大地提高了开发效率。
118 0

热门文章

最新文章