【IT168 技术文档】
身份认证与用户个性化等应用程序服务在实际项目中的使用、实现方式具有非常强的可变性,因此,ASP.NET 2.0以自定义Provider的形式为其提供了非常强大的可定制能力。
参考:若想了解有关在ASP.NET 2.0中通过自定义Provider来定制身份认证与用户个性化应用程序服务的详细实现方法,请分别参考这两篇MSDN文章:《Implementing a Membership Provider 》(http://msdn2.microsoft.com/en-us/library/f1kyba5e.aspx)和《Implementing a Profile Provider 》(http://msdn2.microsoft.com/en-us/library/0580x1f5(VS.80).aspx)。
在ASP.NET AJAX中,应用程序服务往往也会有同样的自定义需求。因此,ASP.NET AJAX在提供一套默认的与服务器端应用程序服务异步通讯的代理的同时,也为其提供了充分的可定制能力,允许我们根据实际需要改变服务器端应用程序服务的实现方式。
自定义身份认证Web Service
若想自定义身份认证服务,我们需要手工编写一个Web Service,且其中一定要包含Login()和Logout()两个方法,分别用来实现用户登录和注销。且这两个方法的签名(包括方法名、参数个数、参数顺序、参数类型以及返回值类型)均要满足一定的要求。
下列代码就是一个自定义身份认证Web Service的原型。我们可以参考该原型中给出的各个方法以及方法的签名,或是基于该原型实现适合实际项目的身份认证方法:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class CustomAuthenticationService : System.Web.Services.WebService
{
/// <summary>
/// 实现用户登录,其中可以自定义验证逻辑。
/// </summary>
/// <param name="userName">待验证的用户名</param>
/// <param name="password">待验证的用户密码</param>
/// <param name="createPersistentCookie">是否创建Cookie,保证登录信息可以跨浏览器会话存在</param>
/// <returns>布尔值,表示是否验证成功</returns>
[WebMethod]
public bool Login(string userName, string password, bool createPersistentCookie)
{
return true;
}
/// <summary>
/// 实现用户注销。
/// </summary>
[WebMethod]
public void Logout()
{
}
}
完成自定义的身份认证Web Service之后,若想在某个ASP.NET AJAX页面中使用这个自定义的身份认证服务,我们需要在ScriptManager中显式声明:
<asp:ScriptManager ID="sm" runat="server">
<AuthenticationService
Path="~/CustomApplicationServices/CustomAuthenticationService.asmx" />
</asp:ScriptManager>
其中粗体部分的<AuthenticationService />标签对应着ASP.NET AJAX服务器端的System.Web.UI.AuthenticationServiceManager类型,负责设置页面中自定义身份认证Web Service的位置。将其Path属性设置为前面编写的CustomAuthenticationService.asmx Web Service之后,该页面中的身份认证处理将均由这个自定义的CustomAuthenticationService.asmx处理。
提示:若是将<AuthenticationService />标签的Path属性设置为空字符串,或是不设置该属性,则ASP.NET AJAX仍会使用默认的身份认证服务。