随笔-313  评论-12175  文章-1 

在ASP.NET AJAX中使用应用程序服务和本地化(1):身份认证组件AuthenticationService

本文来自《ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关》的第五章《应用程序服务和本地化》。

 

实现用户管理是几乎每一个网站都要考虑的问题,ASP.NET 2.0为此特意内建了身份认证应用程序服务,并以统一的方式提供给开发者。身份认证应用程序服务不但使用起来非常简单,也在同时提供了足够灵活的扩展能力。

参考:若想了解更多有关ASP.NET 2.0的身份认证服务,请参考这两篇MSDN文章:《How ASP.NET Security Works 》(http://msdn2.microsoft.com/en-us/library/78d5caaf-055e-41f1-bbde-1b5020775edb.aspx)和《Managing Users by Using Membership 》(http://msdn2.microsoft.com/en-us/library/824c3a24-f0af-427c-a652-0d2d1e9397cd.aspx)。

ASP.NET AJAX框架的身份认证服务能够与ASP.NET 2.0的身份认证应用程序服务集成起来,并为其提供客户端的JavaScript调用代理。ASP.NET AJAX客户端部分身份认证代理的相关功能统一由客户端AuthenticationService对象提供。

AuthenticationService对象的完全限定名为Sys.Services.AuthenticationService。这是一个单例(Singleton)模式的对象,无须手工创建实例即可使用。只要页面中包含有ScriptManager控件,我们即可在客户端直接访问到AuthenticationService对象,进而间接地与服务器端身份认证服务打交道并使用ASP.NET 2.0提供的身份认证的相关功能,例如用户登录和注销等——ASP.NET AJAX框架将负责整个异步通讯的实现细节,就像ASP.NET AJAX异步通讯层为Web Service生成客户端代理一样。

AuthenticationService对象提供了两个方法:login()和logout(),分别用来实现用户登录和注销,还暴露出了一系列的常用属性。下面让我们逐一介绍:

 

5.1.1 login()方法

login()方法用来将用户名和密码传递到服务器端进行验证,并返回是否通过验证的信息,如果需要的话,还会设置相应的客户端Cookie等信息。调用login()方法的完整语法如下:

Sys.Services.AuthenticationService.login(
    userName,
    password, 
    isPersistent, 
    customInfo, 
    redirectUrl, 
    loginCompletedCallback, 
    failedCallback, 
    userContext
);

其中各个参数的含义如表5-1所示。

表5-1 AuthenticationService对象login()方法的参数

  1. userName:将要认证的用户的用户名。
  2. password:将要认证的用户的密码。
  3. isPersistent:布尔值,表示是否保留持久、跨浏览器会话的认证信息。
  4. customInfo:保留字段,可能在将来使用。
  5. redirectUrl:验证成功之后重定向到的URL,若该参数值为null,则不会发生重定向。默认值为null。
  6. loginCompletedCallback:调用认证服务完成之后的回调函数。注意,不管用户是否通过了服务器端认证,只要认证过程中没有出现诸如超时、异常等问题,都会调用该回调函数。然后,在该回调函数内可以得到用户是否通过了此次验证的信息。
  7. failedCallback:调用认证服务失败之后的回调函数。导致失败的原因可能是网络连接超时、或是认证服务内部抛出异常等。若是由于用户提供的用户名和密码不正确而不能通过验证,将不会导致调用认证服务失败,该回调函数将不会被调用。
  8. userContext:随本次异步用户认证调用发送至服务器端的用户上下文对象。

表5-1中所列出的8个参数中,只有userName、password和isPersistent是必须的。至于loginCompletedCallback和failedCallback参数,如果为AuthenticationService对象设置了默认值的话(将在稍后介绍),也可以省略。

调用认证服务完成之后的回调函数,即loginCompletedCallback参数所指定的函数的完整的签名如下(回调函数及其参数的名称可以根据需要自行更改):

function onLoginCompleted(validCredentials, userContext, methodName)

其中,ASP.NET AJAX在执行回调时为我们提供了3个参数:

  1. validCredentials:一个布尔值,表示用户是否成功通过了验证。
  2. userContext:在调用login()方法时传递的用户上下文对象。
  3. methodName:调用方法的方法名。

调用认证服务失败之后的回调函数,即failedCallback参数所指定的函数的完整的签名如下(回调函数及其参数的名称可以根据需要自行更改):

function onAuthenticationFailed(error, userContext, methodName)

ASP.NET AJAX在执行回调时同样为我们提供了3个参数:

  1. error:导致认证服务失败的异常对象。
  2. userContext:在调用login()方法时传递的用户上下文对象。
  3. methodName:调用方法的方法名。

 

5.1.2 logout()方法

logout()方法用来注销当前已经登录的用户。调用logout()方法的完整语法如下:

Sys.Services.AuthenticationService.logout(
    redirectUrl, 
    logoutCompletedCallback, 
    failedCallback, 
    userContext
);

其中各个参数的含义如表5-2所示。

表5-2 AuthenticationService对象logout()方法的参数

  1. redirectUrl:注销成功之后重定向到的URL,若该参数值为null,则将自动重定向至当前页面。默认值为null。
  2. logoutCompletedCallback:注销用户完成之后的回调函数。
  3. failedCallback:注销用户失败之后的回调函数。导致失败的原因可能是网络连接超时、或是认证服务内部抛出异常等。
  4. userContext:随本次异步用户认证调用发送至服务器端的用户上下文对象。

表5-2中所列出的4个参数均是可选的。对于logoutCompletedCallback和failedCallback参数,如果为AuthenticationService对象设置了默认值的话(将在稍后介绍),也可以省略。

注销成功之后的回调函数,即logoutCompletedCallback参数所指定的函数的完整的签名如下(回调函数及其参数的名称可以根据需要自行更改):

function onLogoutCompleted(validCredentials, userContext, methodName)

其中,ASP.NET AJAX在执行回调时为我们提供了3个参数:

  1. result:目前并没有使用到该参数,始终为null。
  2. userContext:在调用logout()方法时传递的用户上下文对象。
  3. methodName:调用方法的方法名。

注销用户失败之后的回调函数,即failedCallback参数所指定的函数的完整的签名如下(回调函数及其参数的名称可以根据需要自行更改):

function onAuthenticationFailed(error, userContext, methodName)

ASP.NET AJAX在执行回调时同样为我们提供了3个参数:

  1. error:导致认证服务失败的异常对象。
  2. userContext:在调用login()方法时传递的用户上下文对象。
  3. methodName:调用方法的方法名。

 

5.1.3 常用属性

除了前面介绍的login()和logout()方法,AuthenticationService对象还提供了几个经常用到的属性,如表5-3所示。

表5-3 AuthenticationService对象的常用属性

  1. isLoggedIn:获取一个布尔值的属性,表示当前用户是否已经登录。
  2. timeout:获取或设定认证请求的超时时间,单位为毫秒。
  3. defaultLoginCompletedCallback:获取或设定默认的调用认证服务完成之后的回调函数。
  4. defaultLogoutCompletedCallback:获取或设定默认的注销用户完成之后的回调函数。
  5. defaultFailedCallback:获取或设定默认的登录/注销失败之后的回调函数。

如下代码演示了设置AuthenticationService对象的timeout属性:

Sys.Services.AuthenticationService.set_timeout(3000);

若是预先设定了defaultLoginCompletedCallback、defaultLogoutCompletedCallback和defaultFailedCallback属性,那么在调用AuthenticationService对象的login()和logout()方法时,即可免去指定各个回调函数的工作。例如,如下代码就设定了AuthenticationService的这3个属性,并定义了相应的默认回调函数:

Sys.Services.AuthenticationService.set_defaultLoginCompletedCallback(onLoginCompleted);
Sys.Services.AuthenticationService.set_defaultLogoutCompletedCallback(onLogoutCompleted);
Sys.Services.AuthenticationService.set_defaultFailedCallback(onAuthenticationFailed);
 
function onLoginCompleted(validCredentials, userContext, methodName) {
    // ...
}
function onLogoutCompleted(result, userContext, methodName) {
    // ...
}
function onAuthenticationFailed(error, userContext, methodName) {
    // ...
}

随后,我们即可直接使用如下代码进行用户登录/注销了。其中userName表示用户名,password表示密码:

Sys.Services.AuthenticationService.login(userName, password, true);
Sys.Services.AuthenticationService.logout();
posted on 2007-07-11 00:00 Dflying Chen 阅读(...) 评论(...) 编辑 收藏