CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  Web Services

soapheader实现身份验证,撒分拉!!

楼主wangzhengxing()2006-09-20 09:15:52 在 .NET技术 / Web Services 提问

我现在做Webserver,实现身份验证,需要用到soapheader,但我不知道soapheader怎么弄,以前从来没有接触过   soapheader.  
  各位高人,谁能给我个指导或例子,在下不甚感激。  
  问题点数:20、回复次数:16Top

1 楼wooting(不醉)回复于 2006-09-20 09:28:46 得分 10

No.1   先定义一个SoapHeader  
  ///   <summary>  
  ///   定义SoapHeader.  
  ///   </summary>  
  public   class   CredentialSoapHeader   :   SoapHeader  
  {  
          public   string   Username;  
          public   string   PasswordHash;  
          public   string   SecurityKey;  
  }  
  -------------------------------------------------------  
  No.2   定义安全类,继承WebService。并提供验证方法。  
  public   class   SecureWebService   :   WebService  
  {  
          public   CredentialSoapHeader   Credentials;  
          protected   string   VerifyCredentials()  
          {  
                  if   (this.Credentials   ==   null  
                  ||   this.Credentials.Username   ==   null  
                  ||   this.Credentials.PasswordHash   ==   null)  
                  {  
                          throw   new   SoapException("没有提供信任令牌",  
                                  SoapException.ClientFaultCode,   "Security");  
                  }  
                  return   CheckCredential(this.Credentials);  
          }  
  }  
  ----------------------------------------------------------------------  
  No.3   让你发布的webservice继承你的安全类。  
  public   class   SecureService   :   SecureWebService  
  {  
   
          public   SecureService()  
          {  
   
                  //如果使用设计的组件,请取消注释以下行    
                  //InitializeComponent();    
          }  
  }  
  -----------------------------------------------------------  
  No.4发布你的Webservice。在客户端对SoapHeader赋值,调用Webservice。完成。Top

2 楼wangzhengxing()回复于 2006-09-20 12:06:45 得分 0

谢谢楼上的。Top

3 楼wooting(不醉)回复于 2006-09-20 19:44:09 得分 0

呵呵。记得结贴。Top

4 楼king951789(king)回复于 2006-09-23 10:56:04 得分 0

DINGTop

5 楼zlz_212(ShREk)回复于 2006-09-25 11:11:03 得分 0

SoapHeader实现验证,好像安全性不太好,最好能结合SSLTop

6 楼longhorn008(菜鸟.net)回复于 2006-10-20 13:57:08 得分 0

作个标记Top

7 楼wenjunqianli(文军)回复于 2006-10-25 10:30:45 得分 0

借个地方用用,怎么调用,webconfig里应该怎么写?Top

8 楼rosanshao(罗三少)回复于 2006-10-30 12:39:16 得分 0

No.3   让你发布的webservice继承你的安全类。  
  public   class   SecureService   :   SecureWebService  
  {  
   
          public   SecureService()  
          {  
   
                  //如果使用设计的组件,请取消注释以下行    
                  //InitializeComponent();    
          }  
  }  
  -----------------------------------------------------------  
  No.4发布你的Webservice。在客户端对SoapHeader赋值,调用Webservice。完成。  
   
  这样同样还不安全,或者使用起来很不方便,要限制登陆后才能访问的还必须调用VerifyCredentials()  
  这个方法,感觉不好,还没有真正做到可重用Top

9 楼Radar2006(中华英雄)回复于 2006-10-31 08:48:59 得分 10

///   <summary>  
  ///   添加Soap头来增加Web   Service的安全性    
  ///   添加类:MyHeader   从   System.Web.Services.Protocols.SoapHeader继承  
  ///   </summary>  
   
  public   class   MyHeader   :   SoapHeader    
  {  
  private   string   _UserID=string.Empty;  
  private   string   _PassWord=string.Empty;  
   
   
  ///   <summary>  
  ///   构造函数  
  ///   </summary>  
  public   MyHeader()  
   
  {    
  }  
   
  ///   <summary>  
  ///   构造函数  
  ///   </summary>  
  ///   <param   name="nUserID">用户ID</param>  
  ///   <param   name="nPassWord">加密后的密码</param>  
  ///    
  public   MyHeader(string   nUserID,string   nPassWord)  
  {  
  Initial(nUserID,nPassWord);  
  }  
   
                     
   
  #region   属性  
     
  ///   <summary>  
  ///   用户名  
  ///   </summary>  
   
  public   string   UserID  
  {  
  get{return   _UserID;}  
  set{_UserID=value;}  
  }  
   
  ///   <summary>  
  ///   加密后的密码  
  ///   </summary>  
   
  public   string   PassWord  
  {  
  get{return   _PassWord;}  
  set{_PassWord=value;}  
  }  
   
  #endregion  
   
  #region   方法  
   
  ///   <summary>  
  ///   初始化  
  ///   </summary>  
  ///   <param   name="nUserID">用户ID</param>  
  ///   <param   name="nPassWord">加密后的密码</param>  
   
  public   void   Initial(string   nUserID,string   nPassWord)  
  {  
  UserID=nUserID;  
  PassWord=nPassWord;  
  }  
   
  ///   <summary>  
  ///   用户名密码是否正确  
  ///   </summary>  
  ///   <param   name="nUserID">用户ID</param>  
  ///   <param   name="nPassWord">加密后的密码</param>  
  ///   <param   name="nMsg">返回的错误信息</param>  
  ///   <returns>用户名密码是否正确</returns>  
   
  public   bool   IsValid(string   nUserID,string   nPassWord,out   string   nMsg)  
  {  
  nMsg="";  
  try  
  {  
  //判断用户名密码是否正确    
  if(nUserID   ==   "WCP"   &&   nPassWord   ==   "6~q3%$d")  
  {  
  return   true;  
  }  
  else  
  {  
  nMsg="对不起,你无权调用此Web服务,可能有如下原因:\n   1.您的帐号被管理员禁用。\n   2.您的帐号密码不正确";  
  return   false;  
  }  
  }  
  catch  
  {  
  nMsg="对不起,你无权调用此Web服务,可能有如下原因:\n   1.您的帐号被管理员禁用。\n   2.您的帐号密码不正确";  
  return   false;  
  }  
   
  }  
   
  ///   <summary>  
  ///   用户名密码是否正确  
  ///   </summary>  
  ///   <returns>用户名密码是否正确</returns>  
   
  public   bool   IsValid(out   string   nMsg)  
  {  
  return   IsValid(_UserID,_PassWord,out   nMsg);  
  }  
  }  
   
  #endregion    
   
  Top

10 楼rosanshao(罗三少)回复于 2006-10-31 09:15:55 得分 0

问题是public   bool   IsValid(string   nUserID,string   nPassWord,out   string   nMsg)  
   
  这个在哪儿调用,每个方法里,如果在每个方法里都要调用这个方法,这种方式明显不能解决问题。Top

11 楼scow(怡红快绿之小橙子|和谐权是第4代人权)回复于 2006-10-31 09:27:30 得分 0

每个都要调,它是基于消息的验证,不是像asp.net的forms验证那样一次验证就行了.  
  虽然可以对于一个webservice实例只赋一次soapheader值.Top

12 楼rosanshao(罗三少)回复于 2006-10-31 15:27:15 得分 0

这样我倒愿意用Session,这样可以写个基类来继承,可以解决上样问题,我一直在想用SoapHeader,又可以只验证一次。Top

13 楼wskyo(呆呆虫)回复于 2006-11-03 10:57:26 得分 0

作个标记Top

14 楼happyamei(啊梅)回复于 2006-11-03 14:31:13 得分 0

收藏下Top

15 楼ycqing()回复于 2006-11-09 12:00:40 得分 0

ding  
  Top

16 楼fancystyle(鳞)回复于 2006-11-09 12:44:54 得分 0

想知道如何只验证一次的方法.如果只是读取可以不验证.只把写操作的验证.  
  其他还有什么方法实现验证不用WINDOWSTop

相关问题

关键词

得分解答快速导航

  • 帖主:wangzhengxing
  • wooting
  • Radar2006

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo