在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()方法的完整语法如下:
[code]userName,
[/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参数所指定的函数的完整的签名如下(回调函数及其参数的名称可以根据需要自行更改):
ASP.NETAJAX在执行回调时同样为我们提供了3个参数:
error:导致认证服务失败的异常对象。
userContext:在调用login()方法时传递的用户上下文对象。
methodName:调用方法的方法名。
5.1.2logout()方法
logout()方法用来注销当前已经登录的用户。调用logout()方法的完整语法如下:
[code]redirectUrl,
[/code]
其中各个参数的含义如表5-2所示。
表5-2AuthenticationService对象logout()方法的参数
redirectUrl:注销成功之后重定向到的URL,若该参数值为null,则将自动重定向至当前页面。默认值为null。
logoutCompletedCallback:注销用户完成之后的回调函数。
failedCallback:注销用户失败之后的回调函数。导致失败的原因可能是网络连接超时、或是认证服务内部抛出异常等。
userContext:随本次异步用户认证调用发送至服务器端的用户上下文对象。
表5-2中所列出的4个参数均是可选的。对于logoutCompletedCallback和failedCallback参数,如果为AuthenticationService对象设置了默认值的话(将在稍后介绍),也可以省略。
注销成功之后的回调函数,即logoutCompletedCallback参数所指定的函数的完整的签名如下(回调函数及其参数的名称可以根据需要自行更改):
其中,ASP.NETAJAX在执行回调时为我们提供了3个参数:
result:目前并没有使用到该参数,始终为null。
userContext:在调用logout()方法时传递的用户上下文对象。
methodName:调用方法的方法名。
注销用户失败之后的回调函数,即failedCallback参数所指定的函数的完整的签名如下(回调函数及其参数的名称可以根据需要自行更改):
ASP.NETAJAX在执行回调时同样为我们提供了3个参数:
error:导致认证服务失败的异常对象。
userContext:在调用login()方法时传递的用户上下文对象。
methodName:调用方法的方法名。
5.1.3常用属性
除了前面介绍的login()和logout()方法,AuthenticationService对象还提供了几个经常用到的属性,如表5-3所示。
表5-3AuthenticationService对象的常用属性
isLoggedIn:获取一个布尔值的属性,表示当前用户是否已经登录。
timeout:获取或设定认证请求的超时时间,单位为毫秒。
defaultLoginCompletedCallback:获取或设定默认的调用认证服务完成之后的回调函数。
defaultLogoutCompletedCallback:获取或设定默认的注销用户完成之后的回调函数。
defaultFailedCallback:获取或设定默认的登录/注销失败之后的回调函数。
如下代码演示了设置AuthenticationService对象的timeout属性:
若是预先设定了defaultLoginCompletedCallback、defaultLogoutCompletedCallback和defaultFailedCallback属性,那么在调用AuthenticationService对象的login()和logout()方法时,即可免去指定各个回调函数的工作。例如,如下代码就设定了AuthenticationService的这3个属性,并定义了相应的默认回调函数:
[code]Sys.Services.AuthenticationService.set_defaultLogoutCompletedCallback(onLogoutCompleted);
[/code]
随后,我们即可直接使用如下代码进行用户登录/注销了。其中userName表示用户名,password表示密码:
[code]Sys.Services.AuthenticationService.logout();
[/code]
实现用户管理是几乎每一个网站都要考虑的问题,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]
相关文章推荐
- 在ASP.NET AJAX中使用应用程序服务和本地化(3):用户个性化组件ProfileService
- 在ASP.NET AJAX中使用应用程序服务和本地化(5):自定义应用程序服务的服务器端实现
- 在ASP.NET AJAX中使用应用程序服务和本地化(5):自定义应用程序服务的服务器端实现
- 在ASP.NET AJAX中使用应用程序服务和本地化(2):示例程序:实现用户登录和注销
- 在ASP.NET AJAX中使用应用程序服务和本地化(6):创建支持多语言的ASP.NET AJAX站点、小结
- 在ASP.NET AJAX中使用应用程序服务和本地化:实现用户登录和注销(转自:Dflying Chen @ cnblogs)
- 在ASP.NET AJAX中使用应用程序服务和本地化(0):目录
- 在ASP.NET AJAX中使用应用程序服务和本地化(4):示例程序:读取、修改并保存用户个性化信息
- 通过使用客户端证书调用 Web 服务以便在 ASP.NET Web 应用程序中进行身份验证
- ASP.NET 2.0应用程序添加ASP.NET AJAX 组件引用之web.config配置
- 在ASP.NET应用程序中使用身份模拟(Impersonation)
- 实例在ASP.NET应用程序中使用身份模拟
- 在ASP.NET应用程序中使用身份模拟 impersonate
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- WebCast《实战ASP.NET AJAX系列课程(2):使用客户端框架创建“纯粹”的Ajax应用程序》相关资源
- ASP.NET学习CORE中使用Cookie身份认证方法
- 使用 Windows CardSpace 保证您的 ASP.NET 应用程序和 WCF 服务的安全
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- 使用ASP.NET AJAX 从脚本中调用Web 服务的应用方法