为了保证Asp.Net Ajax调用的WebService的安全,保证不被任意调用有两种方法。
\n
一、FormsAuthentication模式
\n
这种模式是在WebService的方法中检查调用WebService的用户是否登陆。在调用方法里面首先就检测HttpContext.Current.User.Identity.IsAuthenticated是否为真,为真就是已授权用户否则就是未授权用户。这种方式需要使用FormsAuthentication.SetAuthCookie(“Jeffrey Zhao”, false)方法设置某个用户未已授权用户,当然也可以通过FormsAuthentication的框架来设置用户授权。通过FormsAuthentication.SignOut方法退出登陆。
\n
二、AuthenticationService模式
\n
这种模式是在客户端设置用户登陆。上一种方法是在服务端通过调用FormsAuthentication类的静态方法来设置用户登陆。我想也可以提供一个WebService来调用FormsAuthentication的静态方法来设置用户登陆。
\n
要使用AuthenticationService模式,首先需要在webConfig中节点下节点下节点下添加 节点。requireSSL表示此站点是否是使用Https协议来进行通信的。
\n
用户身份验证(登陆):login方法
Sys.Services.AuthenticationService.login(
userName,//用户名
password, //密码
isPersistent, //是否生成持久Cookie
customInfo, //预留字段
redirectUrl, //登陆成功后跳转目标
loginCompletedCallback, //身份验证完成回调函数
failedCallback, //身份验证出错回调函数
userContext//用户任意指定的上下文对象
)
\n
注意customInfo参数在此处没有任何意义,可能在下一版本有意义。不管用户名和密码是否匹配,只要进行了login并且没有出现网络异常或其他异常,都调用loginCompletedCallback回调函数。
\n
登陆完成的回调函数
\n
function loginCompletedCallback(
validCredentials, //身份验证是否成功
userContext, // 用户随意指定的上下文对象
methodName//即”….login”
)
\n
validCredentials为true表名用户名和密码匹配,否则为用户名和密码不匹配。
失败的回调函数
function failedCallback(
error, // 错误对象
userContext, // 用户随意指定的上下文对象
methodName//即”….login”
)
\n
注销功能:logout方法
Sys.Services.AuthenticationService.logout(
redirectUrl, // 注销后跳转页面
logoutCompletedCallback, //注销成功回调函数
failedCallback, //注销失败回调函数
userContext//用户任意指定的上下文对象
)
\n
注销成功的回调函数
\n
function logoutCompletedCallback(
result, // 预留参数
userContext, // 用户随意指定的上下文对象
methodName//即”….logout”
)
\n
注销失败的回调函数
\n
function failedCallback(
error, // 错误对象
userContext, // 用户随意指定的上下文对象
methodName//即”….logout”
)
\n
timeout属性:用来设置或得到超时时间。
\n
defaultLoginCompletedCallback属性:默认登陆成功的回调函数地址。当login函数指定了登陆成功的回调函数,以login函数的参数为准。
\n
defaultLogoutCompletedCallback属性:默认注销成功的回调函数地址。
\n
defaultFailedCallback属性:默认失败的回调函数地址。
\n
在这里有几点需要说明:
\n
AuthenticationService使用的是默认的memberShipProvider的框架,如果不扩展AuthenticationService服务,需要使用asp.net 配置工具进行用户的配置。否则,login函数不知道如何去哪个数据库去验证用户。asp.net配置工具可以完全的接管用户的管理,需要在配置中创建用户并设置密码。
使用asp.net配置工具时,如果要把数据库作为mdf文件存放在App_Data文件夹中,必须把SqlExpress服务打开,否则创建不了数据库文件。如果不是用数据库文件,使用sql Server 2005远程连接,则可以不用打开SqlExpress服务。