众所周知,WebService是为企业需求提供的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。但在有些时候的某些应用服务不希望被未授权访问,那么此时我们可以一下几种方法来实现身份验证。

方法一:在WebService中引入SoapHeader

  1. #region 配置登录标头
  2. /// <summary>
  3. /// Code CreateBy BanLao
  4. /// </summary>
  5. public class MySoapHeader : SoapHeader
  6. {
  7. private string strUserName = string.Empty;
  8. private string strPassWord = string.Empty;
  9. public MySoapHeader() { }
  10. public MySoapHeader(string username, string password)
  11. {
  12. this.strUserName = username;
  13. this.strPassWord = password;
  14. }
  15. #region 构造 用户名|密码
  16. /// <summary>
  17. /// 用户名
  18. /// </summary>
  19. public string UserName
  20. {
  21. get { return strUserName; }
  22. set { strUserName = value; }
  23. }
  24. /// <summary>
  25. /// 密码
  26. /// </summary>
  27. public string PassWord
  28. {
  29. get { return strPassWord; }
  30. set { strPassWord = value; }
  31. }
  32. #endregion
  33. #region 检测是否正确登录
  34. /// <summary>
  35. /// 检测是否正确登录
  36. /// </summary>
  37. /// <returns></returns>
  38. public bool CheckLogin()
  39. {
  40. if (strUserName == "合法登录名" && strPassWord == "合法登录密码")
  41. {
  42. return true;
  43. }
  44. else
  45. {
  46. return false;
  47. }
  48. }
  49. #endregion
  50. }
  51. #endregion

加入一个服务用于测试:

  1. #region 测试连接
  2. [System.Web.Services.Protocols.SoapHeader("myHeader")]
  3. [WebMethod(Description = "判断用户是否开通", EnableSession = true)]
  4. public string _GetValue(string strInputValue)
  5. {
  6. if (myHeader.CheckLogin())
  7. {
  8. string strReturnValue = strInputValue + "@CopyRight By BanLao 2010";
  9. return strReturnValue;
  10. }
  11. else
  12. {
  13. return "无效的身份验证,请重试!";
  14. }
  15. }
  16. #endregion

至此我们想要的需要通过身份验证的服务配置好了,下面让我们进行一些测试,新建一个webForm在Page_Load中:

  1. WebLogon.MySoapHeader myHeader = new WebLogon.MySoapHeader();
  2. myHeader.UserName = "约定的合法用户";
  3. myHeader.PassWord = "约定的合法密码";
  4. WebLogon.Service This_Service = new WebLogon.Service();
  5. This_Service.MySoapHeaderValue = myHeader;
  6. Response.Write(This_Service._GetValue("This is BanLao's Test Application For SoapHeader. "));

当运行这个WebForm时,如果用户名和密码是正确的我们将看到:

This is BanLao's Test Application For SoapHeader. @CopyRight By BanLao 2010

否则

无效的身份验证,请重试!

方法二:Web Service以Session方式验证

  1. [WebMethod(Description = "检测是否正确登录", EnableSession = true)]
  2. public bool CheckLogin(string strUserName, string strPassword)
  3. {
  4. if (strUserName.Equals("admin") && strPassword.Equals("123456"))
  5. {
  6. Session["LoginState"] = true;
  7. }
  8. else
  9. {
  10. Session["LoginState"] = false;
  11. }
  12. return (bool)Session["LoginState"];
  13. }
  14. #region 测试连接
  15. [WebMethod(Description = "测试连接", EnableSession = true)]
  16. public string _GetValue(string strInputValue)
  17. {
  18. if (Session["LoginState"] == null || Session["LoginState"].Equals(false))
  19. {
  20. return "无效的身份验证,请重试!";
  21. }
  22. else
  23. {
  24. string strReturnValue = strInputValue + "@CopyRight By BanLao 2010";
  25. return strReturnValue;
  26. }
  27. }
  28. #endregion

调用该服务,

  1. WebLogon.Service This_Service = new WebLogon.Service();
  2. This_Service.CookieContainer = new System.Net.CookieContainer();
  3. if (This_Service.CheckLogin("admin", "123456"))
  4. {
  5. Response.Write(This_Service._GetValue("This is BanLao's Test Application For Session. "));
  6. }

当运行这个WebForm时,如果用户名和密码是正确的我们将看到:

This is BanLao's Test Application For Session. @CopyRight By BanLao 2010

否则

无效的身份验证,请重试!

注:如果需要多个合法用户,可以在WebService中声明判断即可

调用WebService时加入身份验证,以拒绝未授权的访问的更多相关文章

  1. 动态调用Webservice 支持Soapheader身份验证(转)

    封装的WebserviceHelp类: using System; using System.CodeDom; using System.CodeDom.Compiler; using System. ...

  2. 动态调用webservice时 ServiceDescriptionImporter类在vs2010无法引用的解决方法

    [导读]ServiceDescriptionImporter是创建Web Service 时使用的类,它是引用继承System.Web.Services 当我将VS2005里写的一段代码放在VS201 ...

  3. 无法在Web服务器上启动调试,与Web服务器通信时出现身份验证错误

    问题描述: 我使用的是修改hosts,模拟真实网址来进行调试的.具体是这样的:我修改hosts文件,把某个域名,如www.163.com映射为127.0.0.1,然后在IIS信息管理器中,创建一个网站 ...

  4. C#调用WebService时插入cookie

    SOAPUI插入Cookie的方法 SOAP插入cookie的方法如下,点击Head,点击加号,然后直接设置就可以了. C#中调用webService时插入Cookie 由于调用的时候必须要带上coo ...

  5. Postman调用WebService,包括头验证部分

    Postman调用WebService时,Body中选择Raw,最右端选择XML(txt/xml),然后把某个方法显示在页面的xml拷贝到请求框中即可,如下图: 以下是postman中的设置,

  6. WinForm客户端调用 WebService时 如何启用Session

    WinForm客户端调用 WebService时 如何启用Session 摘自: http://www.cnblogs.com/swtseaman/archive/2011/04/18/2020176 ...

  7. ABAP调用WebService时日期类型问题

    在使用ABAP调用WebService时, 提示CX_SY_CONVERSION_NO_DATE_TIME,意思是日期格式不能转化. 究其原因是ABAP里没有相应的数据类型与WebService描述里 ...

  8. 解决win7远程桌面连接时发生身份验证错误的方法

    远程桌面连接,是我们比较常用的一个功能了,但有时突然不能用了,以下是我遇到该问题,并解决该问题的方法.连接时报的是“发生身份验证错误,要求的函数不受支持”,解决之后细想一下,该问题好像是在我在电脑上安 ...

  9. Web服务器使用基于纯文本表单的身份验证——.net(未完待续)

    asp.net 表单验证方式 Asp.net的身份验证有有三种,分别是"Windows | Forms| Passport",其中又以Forms验证用的最多,也最灵活. 根据实际需 ...

随机推荐

  1. 第1课_Java基础知识【学习笔记】

    摘要:韦东山android视频学习笔记 一.android系统的基本框架如图一所示,应用程序是用java编写的,底层驱动是用C代码写的,java与C怎么连接在一起主要是通过本地服务.android系统 ...

  2. Spring源码解析--IOC根容器Beanfactory详解

    BeanFactory和FactoryBean的联系和区别 BeanFactory是整个Spring容器的根容器,里面描述了在所有的子类或子接口当中对容器的处理原则和职责,包括生命周期的一些约定. F ...

  3. java调用jni oci接口宕机原因排查

    调用最简单的JNI没有出错,但是涉及到OCI时就会异常退出,分析后基本确定是OCI 11g中的signal所致,参考ora-24550 signo=6 signo=11解决. 但是这个相同的so库直接 ...

  4. ISO/IEC 9899:2011 条款6.8.2——标签语句

    6.8.2 复合语句 语法 1.compound-statement: {    block-item-listopt    } block-item-list: block-item block-i ...

  5. Python3基础 str __add__ 拼接,原字符串不变

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  6. Python中产生随机数

    Python中产生随机数 一.Python自带的random库       1.参生n--m范围内的一个随机数:    random.randint(n,m) 2.产生0到1之间的浮点数:  rand ...

  7. 004-行为型-04-迭代器模式(Iterator)

    一.概述 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示. 迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部 ...

  8. 0.9.0.RELEASE版本的spring cloud alibaba sentinel+gateway网关实例

    sentinel除了让服务提供方.消费方用之外,网关也能用它来限流.我们基于上次整的网关(参见0.9.0.RELEASE版本的spring cloud alibaba nacos+gateway网关实 ...

  9. 泡泡一分钟:eRTIS - A Fully Embedded Real Time 3D Imaging Sonar Sensor for Robotic Applications

    eRTIS - A Fully Embedded Real Time 3D Imaging Sonar Sensor for Robotic Applications eRTIS  - 用于机器人应用 ...

  10. 软件定义网络基础---SDN的核心思想

    一:SDN包含的核心思想:解耦,抽象,可编程 二:解耦 (一)SDN网络解耦思想 解耦是指将控制平面和数据平面进行分离,主要为了解决传统网络中控制平面和数据平面在物理上紧耦合导致的问题 控制平面和数据 ...