练习1:应用程序安全性
通过该练习将在一个已经存在的应用程序中添加认证和基于角色的授权。
第一步
打BugSmak.sln项目,默认的安装路径应该为C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Security\exercises\ex01\begin,并编译。
第二步 在应用程序中添加认证
1.选择Debug | Start Without Debugging菜单命令运行应用程序。应用程序当前没有可以使用的认证用户。
2.关闭应用程序。
3.在解决方案管理器中选择Security \ SecurityHelper.cs文件,选择View | Code菜单命令,添加如下的命名空间。
using System.Web.Security;
4.在方法Authenticate中添加如下代码。
public static bool Authenticate(string username, string password)
{
bool authenticated = false;
// TODO: Authenticate Credentials
authenticated = Membership.ValidateUser(username, password);
// TODO: Get Roles
return authenticated;
}
方法Authenticate将会被窗体LoginForm调用来验证用户身份,Membership.ValidateUser方法实现了用户的验证。Membership系统使用了provider模型,所以应用程序不用去实现数据的存储,ASP.NET ships提供了两种Membership Provider,一是使用Microsoft SQL Server作为数据源,另一个是使用Windows Active Directory。也可以创建自己的Membership Provider,我们已经实现了读取从XML文件中读取application members。
5.在解决方案管理器中选择Security | Providers | ReadOnlyXmlMembershipProvider.cs,并选择View | Code菜单命令回顾一下代码。
ReadOnlyXmlMembershipProvider(继承于MembershipProvider)是一个自定义Provider的示例,它实现从一个未加密的XML文件中读取,这并不是一个好的实践,但是在该练习中却非常的有用。
6.打开App.config文件,查看membership provider的配置,认证数据的存储定义在一个Users.xml的文件中。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<membership defaultProvider="ReadOnlyXmlMembershipProvider">
<providers>
<add name="ReadOnlyXmlMembershipProvider"
type="BugSmak.Security.Providers.ReadOnlyXmlMembershipProvider, BugSmak"
description="Read-only XML membership provider"
xmlFileName="Users.xml" />
</providers>
</membership>
<roleManager enabled="true"
defaultProvider="ReadOnlyXmlRoleProvider">
<providers>
<add name="ReadOnlyXmlRoleProvider"
type="BugSmak.Security.Providers.ReadOnlyXmlRoleProvider, BugSmak"
description="Read-only XML role provider"
xmlFileName="Users.xml" />
</providers>
</roleManager>
</system.web>
</configuration>
如果有一个自定义的Provider,必须对应用程序进行配置。