第1页共28页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共28页WebService的安全机制一个Web应用程序具有的一个重要部分是:能够识别用户和控制对资源的访问。确定请求实体身份的行为称为身份验证。通常,用户必须出示凭据(如名称/密码对)以便进行身份验证。一旦经过验证的标识可用,就必须确定此标识是否可以访问给定的资源。WebService的安全机制主要从两个方面考虑,一个是利用Windows安全机制,另一个就是利用SOAP标头,下面分别进行讨论。一、利用Windows安全机制我们来做一个实验,首先做一个最简单的Web服务程序。PublicFunctionHelloWorld()AsStringHelloWorld="HelloWorld"EndFunction完成以后,打开Internet服务管理器。第2页共28页第1页共28页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共28页找到这个服务程序的虚拟目录,右键,选择“属性”。第3页共28页第2页共28页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第3页共28页找到“目录安全性”选项卡。编辑“匿名访问和验证控制”。取消“匿名访问”和“集成Windows验证”,选择“基本验证”。第4页共28页第3页共28页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第4页共28页好了,现在如果再想打开这个程序,就会提示用户名和密码,而这个权力是在服务器上设置的。第5页共28页第4页共28页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第5页共28页现在我们来做一个客户程序,这是一个普通的Windows程序。第6页共28页第5页共28页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第6页共28页添加Web引用。第7页共28页第6页共28页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第7页共28页在输入WebService的地址以后,它就会提示你输入用户名和密码,如果不对,你是没有办法调用这个Web服务的。在输入服务器正确的用户名和密码以后,你就可以使用了。第8页共28页第7页共28页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第8页共28页现在做一个Button来调用远程的方法。第9页共28页第8页共28页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第9页共28页PublicClassForm1InheritsSystem.Windows.Forms.FormDimaAsNewlocalhost.Service2()PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadEndSubPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickTryMsgBox(a.HelloWorld)CatchMsgBox("请求失败")EndTryEndSubEndClass你会发现,运行以后将提示你“运行失败”,这就是说,调用这个方法的时候,还要发送这个服务器的用户名和密码上去。第10页共28页第9页共28页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第10页共28页我们可以采用这个方法来解决:PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load'a.Credentials获取或设置Web服务客户端身份验证的安全凭据'System.Net.NetworkCredential为基于密码的验证方案提供凭据a.Credentials=NewSystem.Net.NetworkCredential("Administrator","")EndSub好了,现在能正常工作了。第11页共28页第10页共28页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第11页共28页C#代码:user107.Service1obj=newuser107.Service1();privatevoidbutton1_Click(objectsender,System.EventArgse){label1.Text=obj.HelloWorld();}privatevoidForm1_Load(objectsender,System.EventArgse){obj.Credentials=newSystem.Net.NetworkCredential("Administrator","user107");}利用这个方式,可以杜绝没有权限的用户调用Web服务。第12页共28页第11页共28页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第12页共28页二、使用Soap标头自定义身份验证和授权在Internet上,您可能需要对SQL数据库执行自定义身份验证和授...