使用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的任务就交给他了:
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文件如下:
<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:
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。
{
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身份验证 (转)相关推荐
- 在ASP.NET应用程序中捕捉身份验证状态的变化
前年我写过一篇随笔抱怨Microsoft在ASP.NET架构中Session_End事件上处理,说来惭愧,其实当年我对ASP.NET运行时的复杂性理解不足.实话说,捕捉通过身份验证和注销身份验证对我来 ...
- asp.net core中使用cookie身份验证
背景 ASP.NET Core Identity 是一个完整的全功能身份验证提供程序,用于创建和维护登录名. 但是, cookie 不能使用基于的身份验证提供程序 ASP.NET Core Ident ...
- ASP.NET Core 项目简单实现身份验证及鉴权
环境 VS 2017 ASP.NET Core 2.2 目标 以相对简单优雅的方式实现用户身份验证和鉴权,解决以下两个问题: 无状态的身份验证服务,使用请求头附加访问令牌,几乎适用于手机.网页.桌面应 ...
- java webservice 身份验证_java-Http基本身份验证不适用于Spring WS和WebS...
我尝试使用Spring(-WS)将HTTP基本身份验证凭据添加到我的SOAP请求中.该请求本身有效,但是没有凭据提交. HTTP标头应如下所示: [...] Connection: Keep-Aliv ...
- asp.net身份验证方式
ASP.NET身份验证模式包括Windows.Forms(窗体).Passport(护照)和None(无). 重点内容 Windows身份验证 常结合应用程序自定义身份验证使用使用这种身份验证模式时, ...
- python调用soap_如何在python zeep中调用soap api而不使用wsdl(非wsdl模式)?使用用户和密码身份验证调用位置URL...
我无法在Zeep python客户端中为SOAP API验证用户身份 . 我有两个网址: 1) http://credotrade.stg-tradingcrm.com:8093/mex - 它指定了 ...
- asp.net2.0安全性(3)--验证与授权
"验证"与"授权"是对网页资源安全管理的两道门. 验证(Authentication):检查用户是否是合法的用户.就像是网站大门口的保卫,服责验证使用的用户名和 ...
- 基于windows的身份验证
如果将 ASP.NET 配置为使用 Windows 身份验证,则 IIS 使用配置的 IIS 身份验证机制执行用户身份验证.启用Windows身份验证的步骤如下: (1) 配置 Web.config文 ...
- SQL Server 数据库之身份验证和访问控制
身份验证和访问控制 1. 身份验证模式 1.1 Window 身份验证模式 1.2 混合身份验证模式 2. 管理登录名 2.1 创建 Windows 登录名 2.2 创建 SQL Server 登录名 ...
- WSFederation 身份验证模块概述
Windows Identity Foundation (WIF) 包括通过 WS-联合身份验证模块 (WS-FAM) 对 ASP.NET 应用程序中联合身份验证的支持. 本主题有助于理解联合身份验证 ...
最新文章
- MySQL 常见操作指令
- 曲线均匀分布_R——概率统计与模拟(三) 变换均匀分布对特定分布进行抽样
- Solr空间搜索原理分析与实践
- python3 json模块_详解python 3.6 安装json 模块(simplejson)
- 技术文档的撰写_如何撰写出色的技术博客文章
- Mr.J--JS事件监听(捕获冒泡)
- 拳王虚拟项目公社:最新创业好项目有哪些,90后创业好项目,虚拟资源兼职副业好项目
- 使用jenkins构建并发送邮件
- SQL——连接查询、聚合函数、开窗函数、分组功能、联合查询、子查询
- Javascript:遍历json数据的方法
- 数理逻辑习题集(6)
- java正则表达式版本_java 正则表达式 版本号_java正则表达式?=.*_密码的正则表达式java...
- 【SW】利用3D打印机打印 PCB 钢网的方法
- 读《洞穴奇案》——一个人是否应该为了避免偷窃面包而挨饿致死?
- 箱形图适用于哪种数据_Excel 数据可视化:箱形图全面解析!
- GhostNet网络详解
- switch的使用及注意事项
- ubuntu开启远程桌面功能
- Android 应用A开启应用B
- fatal: http://gitlab.xxxx.com/xxx/songjy-coocaa.git/info/refs not valid: is this a git repository