使用ASP.Net Forms模式实现WebService身份验证

在安全性要求不是很高的ASP.Net程序中,基于Forms的身份验证是经常使用的一种方式,而如果需要对WebService进行身份验证,最常用的可能是基于Soap 标头的自定义身份验证方式。如果对两者做一下比较的话,显然,基于Forms的验证方式更加方便易用,能否将Forms验证方式应用到WebService中去呢? 
    从理论上讲,使用基于Forms的方式对WebService进行身份验证是可行的,但是使用过程中会存在以下两个问题:
1.基于Forms的验证方式同时也是基于Cookie的验证方式,在使用浏览器时,这个问题是不需要我们考虑的。但对于使用WebService的应用程序来说,默认是不能保存Cookie的,需要我们自己去做这个工作。
2.WebService既然是一个A2A(Application To Application)应用程序,使用Web表单进行身份验证显然不太合适,而且,这将不可避免的造成人机交互,使WebService的应用大打折扣。
  接下来,我们就分步解决这两个问题:
1.Cookie的保存问题
    WebService的客户端代理类有一个属性CookieContainer可用于设置或获取Cookie集合,保存Cookie的任务就交给他了:

System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();

MyService.WebService service = new App.MyService.WebService();
service.CookieContainer = cookieContainer;

2.我们不想使用Web表单进行身份验证,幸运的是,ASP.Net表单验证中的表单页(即Web.config文件中 forms 元素内的loginUrl)同样可以指定为WebService文件。
    我们创建一个专门用作身份验证的Web服务,暂且命名为Login.asmx,然后让 loginUrl 等于 “Login.asmx”,当然,还需要在Web.config文件中的 authorization 节中禁止匿名访问(否则我们可就白忙活了),完成配置后的Web.config文件如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
       <compilation debug="false" />
      <authentication mode="Forms">
        <forms name="MyService" loginUrl="Login.asmx"></forms>
      </authentication>
      <authorization >
        <deny users="?"/>
      </authorization>
    </system.web>
</configuration>

其实我们并不想在未通过身份验证时让浏览器转向到Login.asmx,对于使用WebService的客户程序来说,真正的实惠在于:可以匿名访问Login.asmx中的方法(当然我们也可以把Login.asmx放在单独的目录中,然后允许对该目录的匿名访问来达个这个目的,但我觉得还是用loginUrl更优雅一些)。
    接下来,我们为Login.asmx添加用于身份验证的WebMethod:

[WebMethod]
public bool Check(string userName,string password)
{
    if (userName == "aaaaaa" && password == "123456")//添加验证逻辑
    {
        System.Web.Security.FormsAuthentication.SetAuthCookie(userName, false);
        return true;
    }
    else
    {
        return false;
    }
}

最后一步工作就是:让客户程序中的WebService实例与Login实例共享CookieContainer。

class Sample
{
    System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();

    public void Login()
    {
        MyServiceLogin.Login login = new App.MyServiceLogin.Login();
        login.CookieContainer = cookieContainer;
        login.Check("aaaaaa", "123456");                       
    }

    public void ShowHelloWorld()
    {
        MyService.WebService service = new App.MyService.WebService();
        service.CookieContainer = cookieContainer;

        Console.WriteLine(service.HelloWorld());
    }
}

Login()以后再ShowHelloWorld(),你是否看到了我们熟悉的“Hello World”?Ok,就这么简单!

转载于:https://www.cnblogs.com/yanbinboy/archive/2008/06/02/1211852.html

使用ASP.Net Forms模式实现WebService身份验证 (转)相关推荐

  1. 在ASP.NET应用程序中捕捉身份验证状态的变化

    前年我写过一篇随笔抱怨Microsoft在ASP.NET架构中Session_End事件上处理,说来惭愧,其实当年我对ASP.NET运行时的复杂性理解不足.实话说,捕捉通过身份验证和注销身份验证对我来 ...

  2. asp.net core中使用cookie身份验证

    背景 ASP.NET Core Identity 是一个完整的全功能身份验证提供程序,用于创建和维护登录名. 但是, cookie 不能使用基于的身份验证提供程序 ASP.NET Core Ident ...

  3. ASP.NET Core 项目简单实现身份验证及鉴权

    环境 VS 2017 ASP.NET Core 2.2 目标 以相对简单优雅的方式实现用户身份验证和鉴权,解决以下两个问题: 无状态的身份验证服务,使用请求头附加访问令牌,几乎适用于手机.网页.桌面应 ...

  4. java webservice 身份验证_java-Http基本身份验证不适用于Spring WS和WebS...

    我尝试使用Spring(-WS)将HTTP基本身份验证凭据添加到我的SOAP请求中.该请求本身有效,但是没有凭据提交. HTTP标头应如下所示: [...] Connection: Keep-Aliv ...

  5. asp.net身份验证方式

    ASP.NET身份验证模式包括Windows.Forms(窗体).Passport(护照)和None(无). 重点内容 Windows身份验证 常结合应用程序自定义身份验证使用使用这种身份验证模式时, ...

  6. python调用soap_如何在python zeep中调用soap api而不使用wsdl(非wsdl模式)?使用用户和密码身份验证调用位置URL...

    我无法在Zeep python客户端中为SOAP API验证用户身份 . 我有两个网址: 1) http://credotrade.stg-tradingcrm.com:8093/mex - 它指定了 ...

  7. asp.net2.0安全性(3)--验证与授权

    "验证"与"授权"是对网页资源安全管理的两道门. 验证(Authentication):检查用户是否是合法的用户.就像是网站大门口的保卫,服责验证使用的用户名和 ...

  8. 基于windows的身份验证

    如果将 ASP.NET 配置为使用 Windows 身份验证,则 IIS 使用配置的 IIS 身份验证机制执行用户身份验证.启用Windows身份验证的步骤如下: (1) 配置 Web.config文 ...

  9. SQL Server 数据库之身份验证和访问控制

    身份验证和访问控制 1. 身份验证模式 1.1 Window 身份验证模式 1.2 混合身份验证模式 2. 管理登录名 2.1 创建 Windows 登录名 2.2 创建 SQL Server 登录名 ...

  10. WSFederation 身份验证模块概述

    Windows Identity Foundation (WIF) 包括通过 WS-联合身份验证模块 (WS-FAM) 对 ASP.NET 应用程序中联合身份验证的支持. 本主题有助于理解联合身份验证 ...

最新文章

  1. MySQL 常见操作指令
  2. 曲线均匀分布_R——概率统计与模拟(三) 变换均匀分布对特定分布进行抽样
  3. Solr空间搜索原理分析与实践
  4. python3 json模块_详解python 3.6 安装json 模块(simplejson)
  5. 技术文档的撰写_如何撰写出色的技术博客文章
  6. Mr.J--JS事件监听(捕获冒泡)
  7. 拳王虚拟项目公社:最新创业好项目有哪些,90后创业好项目,虚拟资源兼职副业好项目
  8. 使用jenkins构建并发送邮件
  9. SQL——连接查询、聚合函数、开窗函数、分组功能、联合查询、子查询
  10. Javascript:遍历json数据的方法
  11. 数理逻辑习题集(6)
  12. java正则表达式版本_java 正则表达式 版本号_java正则表达式?=.*_密码的正则表达式java...
  13. 【SW】利用3D打印机打印 PCB 钢网的方法
  14. 读《洞穴奇案》——一个人是否应该为了避免偷窃面包而挨饿致死?
  15. 箱形图适用于哪种数据_Excel 数据可视化:箱形图全面解析!
  16. GhostNet网络详解
  17. switch的使用及注意事项
  18. ubuntu开启远程桌面功能
  19. Android 应用A开启应用B
  20. fatal: http://gitlab.xxxx.com/xxx/songjy-coocaa.git/info/refs not valid: is this a git repository

热门文章

  1. 医学统计学基础——第一讲
  2. github上有什么好的渗透测试软件?(Git_Pentesting_Toolkit)
  3. Upgrading to Java 8——第四章 The Stream API
  4. linux下c语言编程之一环境架设和入门
  5. 货币转换函数:CURRENCY_CONVERTING_FACTOR
  6. Struts2中的校验器
  7. 如何安装和_彻底卸载MySQL
  8. 席位分配:惯例Q值法,dhondt法matlab实现
  9. Elastic Search 学习笔记
  10. docker 常用命令 五 容器日志