要以安全的方式访问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小时内删除。
发表评论