已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Web Service的安全机制一个 Web 应用程序具有的一个重要部分是:能够识别用户和控制对资源的访问。确定请求实体身份的行为称为身份验证。通常,用户必须出示凭据(如名称/密码对)以便进行身份验证。一旦经过验证的标识可用,就必须确定此标识是否可以访问给定的资源。Web Service的安全机制主要从两个方面考虑, 一个是利用Windows安全机制,另一个就是利用SOAP标头,下面分别进行讨论。一、 利用Windows安全机制我们来做一个实验,首先做一个最简单的Web服务程序。 Public Function HelloWorld() As String HelloWorld = Hello WorldEnd Function完成以后,打开Internet服务管理器。 找到这个服务程序的虚拟目录,右键,选择“属性”。找到“目录安全性”选项卡。编辑“匿名访问和验证控制”。 取消“匿名访问”和“集成Windows验证”,选择“基本验证”。 好了,现在如果再想打开这个程序,就会提示用户名和密码,而这个权力是在服务器上设置的。 现在我们来做一个客户程序,这是一个普通的Windows程序。添加Web引用。 在输入Web Service的地址以后,它就会提示你输入用户名和密码,如果不对,你是没有办法调用这个Web服务的。 在输入服务器正确的用户名和密码以后,你就可以使用了。 现在做一个Button来调用远程的方法。Public Class Form1Inherits System.Windows.Forms.Form Dim a As New localhost.Service2() Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try MsgBox(a.HelloWorld) Catch MsgBox(请求失败) End Try End SubEnd Class你会发现,运行以后将提示你“运行失败”,这就是说,调用这个方法的时候,还要发送这个服务器的用户名和密码上去。我们可以采用这个方法来解决:Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load a.Credentials获取或设置Web服务客户端身份验证的安全凭据 System.Net.NetworkCredential为基于密码的验证方案提供凭据 a.Credentials = New System.Net.NetworkCredential(Administrator, )End Sub 好了,现在能正常工作了。C#代码:user107.Service1 obj=new user107.Service1();private void button1_Click(object sender, System.EventArgs e)label1.Text=obj.HelloWorld();private void Form1_Load(object sender, System.EventArgs e) obj.Credentials = new System.Net.NetworkCredential(Administrator, user107); 利用这个方式,可以杜绝没有权限的用户调用Web服务。二、使用 Soap 标头自定义身份验证和授权 在 Internet 上,您可能需要对 SQL 数据库执行自定义身份验证和授权。在这种情况中,应向服务传递自定义凭据(如用户名和密码),并让服务自己处理身份验证和授权。 将额外的信息连同请求一起传递给 XML Web 服务的简便方法是通过 SOAP 标头。为此,需要在服务中定义一个从 SOAPHeader 派生的类,然后将服务的公共字段声明为该类型。下面我们通过一个例子来说明这个问题。首先做一个Web服务程序。在这个程序里面,需要注意:服务中的每个 WebMethod 都可以使用 SoapHeader 自定义属性定义一组关联的标头。默认情况下,标头是必需的,但也可以定义可选标头。SoapHeader 属性指定公共字段的名称或者 Client 或 Server 类的属性(本标题中称为 Headers 属性)。在为输入标头调用方法前,WebService 设置 Headers 属性的值;而当方法为输出标头返回时,WebService 检索该值。我们可以先做一个标头类:Public Class AuthHeaderVB : Inherits SoapHeader它继承于SoapHeader,然后把它声明成一个对象: Public sHeader As AuthHeaderVB 然后,所有需要标头控制的方法,都需要在前缀上加上标头声明: Public Function SecureMethod() As String下面是具体的程序,当然为了简单,得到客户传过来的用户名和密码以后,我们并不是用数据库处理,而是简单的用一个IF语句处理,但是这种方法,可以扩大成各种情况:Imports System.Web.ServicesImports System.Web.Services.Protocols _Public Class Service1 Inherits System.Web.Services.WebService Public Class AuthHeaderVB : Inherits SoapHeader Public Username As String Public Password As String End Class Public sHeader As AuthHeaderVB Public Function SecureMethod() As String If (sHeader Is Nothing) Then Return 错误: 请提供凭据 End If Dim usr As String = sHeader.Username Dim pwd As String = sHeader.Password If (AuthenticateUser(usr, pwd) Then Return 成功: & usr & , & pwd Else Return 错误: 未能通过身份验证 End If End Function Public Function HelloWorld() As String If (sHeader Is Nothing) Then Return 错误: 请提供凭据 End If Dim usr As String = sHeader.Username Dim pwd As String = sHeader.Password If (AuthenticateUser(usr, pwd) Then Return 成功: & 你好,我的世界 Else Return 错误: 未能通过身份验证 End If End Function Private Function AuthenticateUser(ByVal usr As String, ByVal pwd As String) As Boolean If (Not (usr Is Nothing) And Not (pwd Is Nothing) Then 可在此查询数据库以获取凭据. If usr = abc And pwd = 123 Then Return True End If End If Return False End FunctionEnd Class 运行一下,我们可以看到提供方法说明的网站。 但是这里已经不提供测试,而是提供了用户名和密码的加入的说明。POST /WebService1/Service1.asmx HTTP/1.1Host: localhostContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: /HelloWorld string string 现在我们来做一个客户程序,看看SOAP标头到底有什么样的表现。为了进行测试,我们简单的加三个Button。分别用不同的情况调用Web服务的方法。添加Web引用。代码,第一个事件密码有意给的是错的。Public Class Form1Inherits System.Windows.Forms.Form Dim a As New localhost.Service1() 调用SecureMethod Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myHeader As New localhost.AuthHeaderVB() myHeader.Username = abc myHeader.Password = 1234 a.AuthHeaderVBValue = myHeader MsgBox(a.SecureMethod() End Sub 调用HelloWorld Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim myHeader As New localhost.AuthHeaderVB() myHeader.Username = abc myHeader.Password = 123 a.AuthHeaderVBValue = myHeader MsgBox(a.HelloWorld) End Sub 直接调用HelloWorld Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Try MsgBox(a.HelloWorld) Catch ee As Exception MsgBox(ee.Message) End Try End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End SubEnd Class下面我们来做个实验首先点:“直接调用HelloWorld”它会提示你“进行调用以前,客户端没有设置SOAP标头”,所以直接调用是不可以的。下面,你点一下“调用SecureMethod”,而程序中有意把提供的密码设成错误的。问题是你再点一下“直接调用HelloWorld”,它也提供了一个密码错误的信息。说明标头的设置对第二个方法也是起作用的。好,现在你点一下“调用HelloWorld”,这段程序的用户名和密码是正确的,成功了。现在,你再点一下“直接调用HelloWorld”,它将出来一个正确的结果,说明只要标头正确,你就可以一直的使用。如果再设置一下错误的标头呢?现在点它又是错误,可以看出来,一个Web服务程序,标头只有一个。利用这个原理,我们就可以设计出很好的具有安全性的程序来。同样的C#代码:服务器:using System.Web.Services.Protocols;public class AuthHeaderVB :SoapHeaderpublic string Username;public string Password;public AuthHeaderVB sHeader;WebMethod(), SoapHeader(sHeader)public string SecureMethod()if (sHeader=null) return 错误: 请提供凭据;string usr= sHeader.Username;string pwd = sHeader.Password;if (AuthenticateUser(usr, pwd)return 成功: + usr + , + pwd;elsereturn 错误: 未能通过身份验证;WebMethod(), SoapHeader(sHeader)public string HelloWorld()if (sHeader=null)return 错误: 请提供凭据;string usr= sHeader.Username;string pwd= sHeader.Password;if (AuthenticateUser(usr, pwd)return 成功: + 你好,我的世界;elsereturn 错误: 未能通过身份验证;bool AuthenticateUser(string usr, string pwd)if (usr!=null) & (pwd !=null)/可在此查询数据库以获取凭据.if (usr = abc) & (pwd = 123)retur
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026贵州贵阳市云城中学招聘(第一期)备考题库含答案解析(必刷)
- 2025复旦大学招聘专职辅导员、专职心理健康教育教师30人备考公基题库带答案解析
- 2026秋季国家管网集团北方管道公司高校毕业生招聘备考题库附答案
- 中国烟草招聘官网2026校园招聘历年真题汇编及答案解析(夺冠)
- 2025厦门大学经济学院国际经济与贸易系主任招聘1人历年真题汇编带答案解析
- 食品安全与营养的课件
- 2025重庆大剧院管理有限公司招聘1人历年真题库带答案解析
- 2025广东广州白云区三元里街经济高质量发展工作专班招商引资组招聘招商专员2人备考公基题库附答案解析
- 2025哈尔滨工业大学(威海)秋季心理咨询岗位招聘1人备考公基题库附答案解析
- 2026福建漳州市国企类选优生选拔引进38人备考公基题库附答案解析
- 预采购合同模板
- 医院内部控制手册
- GJB9001C软件设计开发控制程序(含完整表单)
- 2024年共青团团课考试题库(含答案)
- JTG-QB-003-2003公路桥涵标准图钢筋混凝土盖板涵
- 企业微信指导手册管理员版
- 《韩国日常饮食》课件
- 《赵匡胤:北宋的开国皇帝》
- 代为领取诉讼费退费委托书
- 康养制度完整
- 建筑施工QC小组提高隧道光面爆破开挖一次成型率成果汇报
评论
0/150
提交评论