摘 自: http://blog.sina.com.cn/s/blog_72b7a82d0100yyp8.html

WebService基于SoapHeader实现安全认证[webservice][.net][安全][soapheader]

本文仅提供通过设置SoapHeader来控制非法用户对WebService的调用,如果是WebService建议使用WSE3.0来保护Web服务,如果使用的是Viaual Studio 2008可以使用WCF,WCF里面提供了更多的服务认证方法。以下提供一种基于SoapHeader的自定义验证方式。

1.首先要自定义SoapHeader,须继承System.Web.Services.Protocols.SoapHeader。

using System;
using System.Collections.Generic;
using System.Web; namespace WuFrame
{ /// <summary>
///自定义的SoapHeader
/// </summary>
public class WuSoapHeader : System.Web.Services.Protocols.SoapHeader
{
private string userName = string.Empty;
private string passWord = string.Empty;
/// <summary>
/// 构造函数
/// </summary>
public WuSoapHeader()
{
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="userName">用户名</param>
/// <param name="passWord">密码</param>
public WuSoapHeader(string userName, string passWord)
{
this.userName = userName;
this.passWord = passWord;
}
/// <summary>
/// 获取或设置用户用户名
/// </summary>
public string UserName
{
get { return userName; }
set { userName = value; }
}
/// <summary>
/// 获取或设置用户密码
/// </summary>
public string PassWord
{
get { return passWord; }
set { passWord = value; }
}
}
}

2.添加WebService,并编写相应代码。

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.SessionState;
using System.Web.Services; using WuFrame;
using BSFW.Dao;
using BSFW.Model;
using System.Data; namespace BSFW
{
/// <summary>
/// Test 的摘要说明
/// </summary>
[WebService(Namespace = "http://wuyf.ws/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)] public class Test : System.Web.Services.WebService
{
public WuSoapHeader myHeader = new WuSoapHeader(); [WebMethod(EnableSession = true)]
//[WebMethod]
[System.Web.Services.Protocols.SoapHeader("myHeader")]
public string HelloWorld(string name)
{
bool isLogin = false;
string loginMsg = string.Empty; if (myHeader.UserName.Equals("wu") && myHeader.PassWord.Equals(""))
{
isLogin = true;
loginMsg = "验证成功!";
}
else
{
isLogin = false;
loginMsg = "验证失败! username: " + myHeader.UserName + ", passowrd:" + myHeader.PassWord;
} if (Session["name"] == null)
{
Session.Add("name", "");
}
Session["name"] = name;
return Session["name"].ToString() + ", 验证消息: " + loginMsg;
}
}

}

3.客户端调用,分别使用不设置SoapHeader与设置SoapHeader。

        WsTest.Test test = new WsTest.Test();
System.Net.CookieContainer cc = new System.Net.CookieContainer();
private void button1_Click(object sender, EventArgs e)
{
WsTest.WuSoapHeader header = new WsTest.WuSoapHeader();
header.UserName = txt_User.Text.ToString();
header.PassWord = txt_Pwd.Text.ToString();
test.WuSoapHeaderValue = header; MessageBox.Show(test.HelloWorld("winformApp_" + Guid.NewGuid().ToString()));
}

添加自定义SoapHeader可以成功调用WebService,否则不能调用WebService,从而实现对Web Service的非法调用。这种方法存在一定的弊端,就是在每一个WebService方法上都要进行一下验证,如果用户名与密码存储在数据库中,每调用一次WebService都要访问一次数据库进行用户名与密码的验证,对于频繁调用WebService来说,数据库压力很大。然而少量WebService调用这种方式还是一种不错的选择。

当然可以启用 Session 来解决以上所述的问题...

最新文章

  1. poj3750-小孩报数问题(约瑟夫环)
  2. sqoop的使用
  3. (转)LSTM NEURAL NETWORK FOR TIME SERIES PREDICTION
  4. Java/Android引用类型及其使用分析
  5. Sed替换行和字符shell
  6. Android eMMC Booting
  7. POJ 1251 Jungle Roads
  8. OC6_字符串练习
  9. ACM2028
  10. MingW环境下的windows编程
  11. xml字符串转为XmlDocument
  12. Android轮播图
  13. 网站开发进阶(六)JSP两种声明变量的区别
  14. 联想Y7000安装显卡驱动
  15. 转-OWASP CSRFGuard使用细节
  16. Sitecore中Core,Master和Web数据库之间的区别
  17. iOS动画-从UIView到Core Animation
  18. 基于BlogEngine.NET搭建个人博客
  19. python图片和分形树
  20. 第10章 网络安全(5)_访问控制列表ACL

热门文章

  1. WP的SEO工具汇总
  2. 也记一次性能优化:LINQ to SQL中Contains方法的优化
  3. CodeForces 766D Mahmoud and a Dictionary
  4. CodeForces 731E Funny Game
  5. BZOJ2654/COGS1764 [2012国家集训队]tree(陈立杰) [生成树,二分]
  6. Flask实战第67天:Flask+Celery实现邮件和短信异步发送
  7. IN 运算符
  8. Xamarin Android SDK无法更新的解决办法
  9. 关于windows环境下cordova命令行无法启动adb.exe的解决办法
  10. 机房重构包图(从三层+实体到三层+实体+外观+工厂+接口+SQLHelper)