要以安全的方式访问Web服务方法,可以考虑以下安全措施:
是谁调用?--SoapHeader身份认证。
来自哪里?--访问IP认证。
加密传输 --SSL安全访问。
这些安全保护措施常常是配合使用的。
7.9.1  通过SoapHeader来增强Web Service的安全性
通过SoapHeader我们可以让具有指定用户口令的用户来访问我们的Web服务接口。(完整代码示例位置:光盘\code\ch07\WebAppClient\WebForm-SoapHeader.aspx)

1.Web Service实现步骤
(1)定义自己的SoapHeader派生类。
1. //<summary>  
2. //定义自己的SoapHeader派生类  
3. //</summary>  
4. public class MySoapHeader : System.Web.Services.Protocols.SoapHeader 
5.
6.     private string _UserID = string.Empty; 
7.     private string _PassWord = string.Empty; 
8.     //<summary>  
9.     //构造函数  
10.     //</summary>  
11.     public MySoapHeader() 
12.     { 
13.     } 
14.     //<summary>  
15.     //构造函数  
16.     //</summary>  
17.     //<param name="nUserID">用户ID</param>  
18.     //<param name="nPassWord">加密后的密码</param>  
19.     public MySoapHeader(string nUserID, string nPassWord) 
20.     { 
21.         Initial(nUserID, nPassWord); 
22.     }  
23.     #region 属性  
24.     //<summary>  
25.     //用户名  
26.     //</summary>  
27.     public string UserID 
28.     { 
29.         get { return _UserID; } 
30.         set { _UserID = value; } 
31.     } 
32.     //<summary>  
33.     //加密后的密码  
34.     //</summary>  
35.     public string PassWord 
36.     { 
37.         get { return _PassWord; } 
38.         set { _PassWord = value; } 
39.     }         
40.     #endregion  
41.     #region 方法  
42.     //<summary>  
43.     //初始化  
44.     //</summary>  
45.     //<param name="nUserID">用户ID</param>  
46.     //<param name="nPassWord">加密后的密码</param>  
47.     private void Initial(string nUserID, string nPassWord) 
48.     { 
49.         UserID = nUserID; 
50.         PassWord = nPassWord; 
51.     } 
52.     //<summary>  
53.     //验证用户名密码是否正确  
54.     //</summary>  
55.     //<param name="nUserID">用户ID</param>  
56.     //<param name="nPassWord">加密后的密码</param>  
57.     //<param name="nMsg">返回的错误信息</param>  
58.     //<returns>用户名密码是否正确</returns>  
59.     private bool IsValid(string nUserID, string nPassWord, out string nMsg) 
60.     { 
61.         nMsg = ""
62.         try 
63.         { 
64.             //判断用户名密码是否正确   
65.             if (nUserID == "admin" && nPassWord == "admin"
66.             { 
67.                 return true
68.             } 
69.             else 
70.             { 
71.                 nMsg = "对不起,你无权调用此Web服务。"
72.                 return false
73.             } 
74.         } 
75.         catch 
76.         { 
77.             nMsg = "对不起,你无权调用此Web服务。"
78.             return false
79.         } 
80.     } 
81.     //<summary>  
82.     //验证用户名密码是否正确  
83.     //</summary>  
84.     //<returns>用户名密码是否正确</returns>  
85.     public bool IsValid(out string nMsg) 
86.     { 
87.         return IsValid(_UserID, _PassWord, out nMsg); 
88.     }  
89.     #endregion  
90.
(2)添加基于SoapHeader验证的Web Service接口方法:
1. //<summary>  
2. //通过SoapHeader来增强Web Service的安全性  
3. //</summary>  
4. [WebService(Namespace = "/")] 
5. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
6. [ToolboxItem(false)] 
7. public class WebService_Soap : System.Web.Services.WebService 
8.
9.     //声明Soap头实例  
调用webservice服务10.     public MySoapHeader myHeader = new MySoapHeader();         
11.  
12.     //普通方法,不需要SoapHeader验证  
13.     [WebMethod(Description = "根据产品编号查询产品的价格")] 
14.     public string GetProductPrice(string ProductId) 
15.     { 
16.         Products pro = new Products(); 
17.         return pro.GetPrice(ProductId); 
18.     } 
19.     //需要SoapHeader验证  
20.     [SoapHeader("myHeader")] 
21.     [WebMethod(Description="根据产品编号查询产品的价格", EnableSession = true)] 
22.     public string GetProductPrice2(string ProductId) 
23.     { 
24.         string msg = ""
25.         //验证是否有权访问  
26.         if (!myHeader.IsValid(out  msg)) 
27.         { 
28.             return msg;//返回错误信息  
29.         } 
30.         Products pro = new Products(); 
31.         return pro.GetPrice(ProductId); 
32.     }               
33.
2.客户端调用具有SoapHeader的Web Service
1. //创建myService对象  
2. ProductServiceSoap.WebService_Soap service = 
3.  
4.     new ProductServiceSoap.WebService_Soap(); 
5. //创建soap头对象  
6. ProductServiceSoap.MySoapHeader header=new ProductServiceSoap.MySoapHeader(); 
7. //设置soap头变量  
8. header.PassWord = "admin"
9. header.UserID = "admin"
10. service.MySoapHeaderValue = header; 
11. //调用web 方法  
12. string strPrice = service.GetProductPrice2("001"); 
通过SoapHeader对用户口令进行验证,只有授权的用户才可以使用该接口。确保了访问接口用户的安全性。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。