練習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,必須對應用程序進行配置。