namespace TestWebService { public class MySoapHeader11:System.Web.Services.Protocols.soapHeader { private string _UserID = string.Empty; private string _PassWord = string.Empty; //<summary> //构造函数 //</summary> public MySoapHeader11() { } //<summary> //构造函数 //</summary> //<param name="nUserID">用户ID</param> //<param name="nPassWord">加密后的密码</param> public MySoapHeader11(string nUserID,string nPassWord) { Initial(nUserID,nPassWord); } #region 属性 //<summary> //用户名 //</summary> public string UserID { get { return _UserID; } set { _UserID = value; } } //<summary> //加密后的密码 //</summary> public string PassWord { get { return _PassWord; } set { _PassWord = value; } } #endregion #region 方法 //<summary> //初始化 //</summary> //<param name="nUserID">用户ID</param> //<param name="nPassWord">加密后的密码</param> private void Initial(string nUserID,string nPassWord) { UserID = nUserID; PassWord = nPassWord; } //<summary> //验证用户名密码是否正确 //</summary> //<param name="nUserID">用户ID</param> //<param name="nPassWord">加密后的密码</param> //<param name="nMsg">返回的错误信息</param> //<returns>用户名密码是否正确</returns> private bool IsValid(string nUserID,string nPassWord,out string nMsg) { nMsg = ""; try { //判断用户名密码是否正确 if (nUserID == "admin" && nPassWord == "admin") { return true; } else { nMsg = "对不起,你无权调用此Web服务。"; return false; } } catch { nMsg = "对不起,你无权调用此Web服务。"; return false; } } //<summary> //验证用户名密码是否正确 //</summary> //<returns>用户名密码是否正确</returns> public bool IsValid(out string nMsg) { return IsValid(_UserID,_PassWord,out nMsg); } #endregion } }
namespace TestWebService { /// <summary> /// MyWebServiceTwo 的摘要说明 /// </summary> [WebService(Namespace = "myWebService.liang2")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolBoxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 // [System.Web.Script.Services.ScriptService] public class MyWebServiceTwo : System.Web.Services.WebService { public MySoapHeader11 myHeader = new MySoapHeader11(); //普通方法,不需要SoapHeader验证 [WebMethod(Description = "描述1")] public string GetProductPrice(string ProductId) { return ProductId; } //需要SoapHeader验证 [SoapHeader("myHeader")] [WebMethod(Description = "描述2",EnableSession = true)] public string GetProductPrice2(string ProductId) { string msg = ""; //验证是否有权访问 if (!myHeader.IsValid(out msg)) { return msg;//返回错误信息 } //Products pro = new Products(); return ProductId; } } }
以下是客户端调用
WebServices.MyWebServiceTwo service = new MyWebServiceTwo(); WebServices.MySoapHeader11 header = new WebServices.MySoapHeader11(); header.PassWord = "admin"; header.UserID = "admin"; service.MySoapHeader11Value = header; //调用web 方法 string strPrice = service.GetProductPrice("AAAAAAAAAA");// 不需要验证 string strPrice2 = service.GetProductPrice2("BBBBBBBBBBB");// 需要验证 Response.Write(strPrice + "====" + strPrice2);
通过SoapHeader对用户口令进行验证,只有授权的用户才可以使用该接口。确保了访问接口用户的安全性。
要以安全的方式访问Web服务方法,可以考虑以下安全措施:
是谁调用?--SoapHeader身份认证。
来自哪里?--访问IP认证。
加密传输 --SSL安全访问。
注:如果用户名和密码是从数据库中读取。这样如果频繁调用webservice中的方法,会增加对数据的频繁访问,影响效率。 可以考虑Session
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。