众所周知,WebService是为企业需求提供的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。但在有些时候的某些应用服务不希望被未授权访问,那么此时我们可以一下几种方法来实现身份验证。
方法一:在WebService中引入SoapHeader
[c-sharp]view plain copy
- #region配置登录标头
- ///<summary>
- ///CodeCreateByBanLao
- ///</summary>
- publicclassMySoapHeader:SoapHeader
- {
- privatestringstrUserName=string.Empty;
- privatestringstrPassWord=string.Empty;
- publicMySoapHeader(){}
- publicMySoapHeader(stringusername,stringpassword)
- {
- this.strUserName=username;
- this.strPassWord=password;
- }
- #region构造用户名|密码
- ///<summary>
- ///用户名
- ///</summary>
- publicstringUserName
- {
- get{returnstrUserName;}
- set{strUserName=value;}
- }
- ///<summary>
- ///密码
- ///</summary>
- publicstringPassWord
- {
- get{returnstrPassWord;}
- set{strPassWord=value;}
- }
- #endregion
- #region检测是否正确登录
- ///<summary>
- ///检测是否正确登录
- ///</summary>
- ///<returns></returns>
- publicboolCheckLogin()
- {
- if(strUserName=="合法登录名"&&strPassWord=="合法登录密码")
- {
- returntrue;
- }
- else
- {
- returnfalse;
- }
- }
- #endregion
- }
- #endregion
加入一个服务用于测试:
[c-sharp]view plain copy
- #region测试连接
- [System.Web.Services.Protocols.SoapHeader("myHeader")]
- [WebMethod(Description="判断用户是否开通",EnableSession=true)]
- publicstring_GetValue(stringstrInputValue)
- {
- if(myHeader.CheckLogin())
- {
- stringstrReturnValue=strInputValue+"@CopyRightByBanLao2010";
- returnstrReturnValue;
- }
- else
- {
- return"无效的身份验证,请重试!";
- }
- }
- #endregion
至此我们想要的需要通过身份验证的服务配置好了,下面让我们进行一些测试,新建一个webForm在Page_Load中:
[c-sharp]view plain copy
- WebLogon.MySoapHeadermyHeader=newWebLogon.MySoapHeader();
- myHeader.UserName="约定的合法用户";
- myHeader.PassWord="约定的合法密码";
- WebLogon.ServiceThis_Service=newWebLogon.Service();
- This_Service.MySoapHeaderValue=myHeader;
- Response.Write(This_Service._GetValue("ThisisBanLao‘sTestApplicationForSoapHeader."));
当运行这个WebForm时,如果用户名和密码是正确的我们将看到:
This is BanLao‘s Test Application For SoapHeader.@CopyRight By BanLao 2010
否则
无效的身份验证,请重试!
方法二:Web Service以Session方式验证
[c-sharp]view plain copy
- [WebMethod(Description="检测是否正确登录",EnableSession=true)]
- publicboolCheckLogin(stringstrUserName,stringstrPassword)
- {
- if(strUserName.Equals("admin")&&strPassword.Equals("123456"))
- {
- Session["LoginState"]=true;
- }
- else
- {
- Session["LoginState"]=false;
- }
- return(bool)Session["LoginState"];
- }
- #region测试连接
- [WebMethod(Description="测试连接",EnableSession=true)]
- publicstring_GetValue(stringstrInputValue)
- {
- if(Session["LoginState"]==null||Session["LoginState"].Equals(false))
- {
- return"无效的身份验证,请重试!";
- }
- else
- {
- stringstrReturnValue=strInputValue+"@CopyRightByBanLao2010";
- returnstrReturnValue;
- }
- }
- #endregion
调用该服务,
[c-sharp]view plain copy
- WebLogon.ServiceThis_Service=newWebLogon.Service();
- This_Service.CookieContainer=newSystem.Net.CookieContainer();
- if(This_Service.CheckLogin("admin","123456"))
- {
- Response.Write(This_Service._GetValue("ThisisBanLao‘sTestApplicationForSession."));
- }
当运行这个WebForm时,如果用户名和密码是正确的我们将看到:
This is BanLao‘s Test Application For Session.@CopyRight By BanLao 2010
否则
无效的身份验证,请重试!
注:如果需要多个合法用户,可以在WebService中声明判断即可
调用WebService时加入身份验证,以拒绝未授权的访问
原文地址:http://www.cnblogs.com/zxh1919/p/7670039.html