您的位置:首页 > 编程语言 > ASP

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

2007-07-11 00:00 921 查看
本文来自《ASP.NETAJAX程序设计第II卷:客户端MicrosoftAJAXLibrary相关》的第五章《应用程序服务和本地化》。

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

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

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

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

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

5.1.1login()方法

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

Sys.Services.AuthenticationService.login(

[code]userName,
password,

isPersistent,

customInfo,

redirectUrl,

loginCompletedCallback,

failedCallback,

userContext

);

[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}

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

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

userName:将要认证的用户的用户名。

password:将要认证的用户的密码。

isPersistent:布尔值,表示是否保留持久、跨浏览器会话的认证信息。

customInfo:保留字段,可能在将来使用。

redirectUrl:验证成功之后重定向到的URL,若该参数值为null,则不会发生重定向。默认值为null。

loginCompletedCallback:调用认证服务完成之后的回调函数。注意,不管用户是否通过了服务器端认证,只要认证过程中没有出现诸如超时、异常等问题,都会调用该回调函数。然后,在该回调函数内可以得到用户是否通过了此次验证的信息。

failedCallback:调用认证服务失败之后的回调函数。导致失败的原因可能是网络连接超时、或是认证服务内部抛出异常等。若是由于用户提供的用户名和密码不正确而不能通过验证,将不会导致调用认证服务失败,该回调函数将不会被调用。

userContext:随本次异步用户认证调用发送至服务器端的用户上下文对象。

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

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

functiononLoginCompleted(validCredentials,userContext,methodName)

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

validCredentials:一个布尔值,表示用户是否成功通过了验证。

userContext:在调用login()方法时传递的用户上下文对象。

methodName:调用方法的方法名。

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

functiononAuthenticationFailed(error,userContext,methodName)


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

error:导致认证服务失败的异常对象。

userContext:在调用login()方法时传递的用户上下文对象。

methodName:调用方法的方法名。

5.1.2logout()方法

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

Sys.Services.AuthenticationService.logout(

[code]redirectUrl,
logoutCompletedCallback,

failedCallback,

userContext

);

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

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

redirectUrl:注销成功之后重定向到的URL,若该参数值为null,则将自动重定向至当前页面。默认值为null。

logoutCompletedCallback:注销用户完成之后的回调函数。

failedCallback:注销用户失败之后的回调函数。导致失败的原因可能是网络连接超时、或是认证服务内部抛出异常等。

userContext:随本次异步用户认证调用发送至服务器端的用户上下文对象。

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

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

functiononLogoutCompleted(validCredentials,userContext,methodName)


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

result:目前并没有使用到该参数,始终为null。

userContext:在调用logout()方法时传递的用户上下文对象。

methodName:调用方法的方法名。

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

functiononAuthenticationFailed(error,userContext,methodName)


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

error:导致认证服务失败的异常对象。

userContext:在调用login()方法时传递的用户上下文对象。

methodName:调用方法的方法名。

5.1.3常用属性

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

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

isLoggedIn:获取一个布尔值的属性,表示当前用户是否已经登录。

timeout:获取或设定认证请求的超时时间,单位为毫秒。

defaultLoginCompletedCallback:获取或设定默认的调用认证服务完成之后的回调函数。

defaultLogoutCompletedCallback:获取或设定默认的注销用户完成之后的回调函数。

defaultFailedCallback:获取或设定默认的登录/注销失败之后的回调函数。

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

Sys.Services.AuthenticationService.set_timeout(3000);


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

Sys.Services.AuthenticationService.set_defaultLoginCompletedCallback(onLoginCompleted);

[code]Sys.Services.AuthenticationService.set_defaultLogoutCompletedCallback(onLogoutCompleted);
Sys.Services.AuthenticationService.set_defaultFailedCallback(onAuthenticationFailed);


functiononLoginCompleted(validCredentials,userContext,methodName){

//...

}

functiononLogoutCompleted(result,userContext,methodName){

//...

}
functiononAuthenticationFailed(error,userContext,methodName){

//...

}

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

Sys.Services.AuthenticationService.login(userName,password,true);

[code]Sys.Services.AuthenticationService.logout();
[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐