asp.net
“Whidbey”是微軟工具套件的下一個版本。按照微軟的計劃,它將會在2004年底推出。
Asp.Net 2.0(codename Whidbey)通過Provider模式為使用者驗證、角色管理等方面提供了非常強大易用的架構模型。Whidbey中提供了一個Asp.Net configuration工具,通過它可以非常容易地配置使用者資訊資料庫,管理角色等等,再與新加入的Security控制項配合,幾乎不用寫什麼代碼就能夠實現使用者驗證和角色管理功能。關於這些控制項和組態工具的具體使用,可以參考這篇文章:使用更精簡的代碼保證 ASP.NET 應用程式的安全
<membership defaultProvider="AspNetAccessProvider" userIsOnlineTimeWindow="15" >
<providers>
<add name="AspNetSqlProvider"
type="System.Web.Security.SqlMembershipProvider, System.Web, Version=1.2.3400.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
description="Stores and retrieves membership data from the local Microsoft SQL Server database"
/>
<add name="AspNetAccessProvider"
type="System.Web.Security.AccessMembershipProvider, System.Web, Version=1.2.3400.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="AccessFileName"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
description="Stores and retrieves membership data from the local Microsoft Access database file"
/>
</providers>
</membership>
關於這段設定檔的更詳細解說,可以參考《A First Look at ASP.NET v. 2.0》。
可以看出,Whidbey預設使用SqlMembershipProvider或者AccessMembershipProvider來進行使用者驗證和管理。這兩個Provider實現了IProvider和IMembershipProvider介面,實際上這兩個介面也是每個MembershipProvider所必需的,其中IProvider負責Provider的初始化,而IMembershipProvider則實現MembershipProvider的主要功能。它們的定義如下:
namespace System.Configuration.Provider
{
public interface IProvider
{
public string Name { get; }
public void Initialize(string name,
System.Collections.Specialized.NameValueCollection config);
}
}
namespace System.Web.Security
{
public interface IMembershipProvider
{
public bool ChangePassword(string name, string oldPwd, string newPwd);
public bool ChangePasswordQuestionAndAnswer(string name, string password,
string newPwdQuestion, string newPwdAnswer);
public System.Web.Security.MembershipUser CreateUser(string username, string password, string email,out System.Web.Security.MembershipCreateStatus status);
public bool DeleteUser(string name);
public System.Web.Security.MembershipUserCollection GetAllUsers();
public int GetNumberOfUsersOnline();
public string GetPassword(string name, string answer);
public System.Web.Security.MembershipUser GetUser(string name,bool userIsOnline);
public string GetUserNameByEmail(string email);
public string ResetPassword(string name, string answer);
public void UpdateUser(System.Web.Security.MembershipUser user);
public bool ValidateUser(string name, string password);
public string ApplicationName {get; set;}
public bool EnablePasswordReset { get;}
public bool EnablePasswordRetrieval { get;}
public bool RequiresQuestionAndAnswer { get;}
}
}
現在可以動手來實現我們自己的MembershipProvider了:
public class MyMembershipProvider : IProvider, IMembershipProvider
{
……
}
驗證功能是必需的:
public bool ValidateUser (string name, string password)
{
string connectStr = ConfigurationSettings.ConnectionStrings["PortalData"];
SqlConnection myConnection = new SqlConnection (connectStr);
SqlCommand myCommand = new SqlCommand ("UserLogin", myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
// Add Parameters to SPROC
SqlParameter parameterEmail = new SqlParameter ("@Email", SqlDbType.NVarChar, 100);
parameterEmail.Value = name;
myCommand.Parameters.Add (parameterEmail);