Web Service的安全机制_原创文档.pdf
WebService的平安机制
一个Web应用程序具有的一个重要局部是:能够识别用户和控制对资源的访问。确定
请求实体身份的行为称为身份验证。通常,用户必须出示凭据〔如名称/密码对〕以便进行
身份验证。一旦经过验证的标识可用,就必须确定此标识是否可以访问给定的资源。
WebService的平安机制主要从两个方面考虑,一个是利用Windows平安机制,另一
个就是利用SOAP标头,下面分别进行讨论。
一、利用Windows平安机制
我们来做一个实验,首先做一个最简单的Web效劳程序。
WebMethod()PublicFunctionHelloWorld()AsStringString
EndFunction
完成以后,翻开Internet效劳管理器。
找到这个效劳程序的虚拟目录,右键,选择“属性〞。
找到“目录平安性〞选项卡。编辑“匿名访问和验证控制〞。
取消“匿名访问〞和“集成Windows验证〞,选择“根本验证〞。
好了,现在如果再想翻开这个程序,就会提示用户名和密码,而这个权力是在效劳器上
设置的。
现在我们来做一个客户程序,这是一个普通的Windows程序。
添加Web引用。
在输入WebService的地址以后,它就会提示你输入用户名和密码,如果不对,你是没
有方法调用这个Web效劳的。
在输入效劳器正确的用户名和密码以后,你就可以使用了。
现在做一个Button来调用远程的方法。
PublicClassForm1
InheritsSy
DimaAsNewlocalhost.Service2()
PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles
MyBase.Load
EndSub
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles
Try
MsgBox(a.HelloWorld)
CatchCatch
请求失败请求失败
EndTry
EndSub
EndClass
你会发现,运行以后将提示你“运行失败〞,这就是说,调用这个方法的时候,还要
发送这个效劳器的用户名和密码上去。
我们可以采用这个方法来解决:
PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles
MyBase.Load
获取或设置Web效劳客户端身份验证的平安凭据
为基于密码的验证方案提供凭据
a.Credentials=NewNew
EndSub
好了,现在能正常工作了。
C#
user107.Service1obj=newuser107.Service1();
privatevoidbutton1_Click(objectsender,System.EventArgse)
{
label1.Text=obj.HelloWorld();
}
privatevoidForm1_Load(objectsender,System.EventArgse)
{
obj.Credentials=newnew
}
利用这个方式,可以杜绝没有权限的用户调用Web效劳。
二、使用Soap标头自定义身份验证和授权
Intern