2009-01-01 21:34来源:http://dever.cnblogs.com/archive/2005/01/10/89602.aspx
问题提出:为了构建一个安全的web服务,需要对调用方进行身份验证,只让通过审核的用户调用web服务。
软件件环境:Web服务程序部署在分布于各地的工厂服务器,这些服务器位于内网之中,没有固定外网IP,且不能通过外网进行访问。调用这些Web服务的是一台连接至internet的WEB服务器,该WEB服务器通过VPN与各个工厂的服务器相连。
解决方案一:通过SOAP Header传递用户名和密码。
1. 首先需要在服务中定义一个从 SOAPHeader 派生的类,表示传入 SOAP 标头的数据。
public class CredentialSoapHeader : System.Web.Services.Protocols.SoapHeader
{
private string _UserID=string.Empty;
private string _PassWord=string.Empty;
public string UserID
{
get{return _UserID;}
set{_UserID=value;}
}
public string PassWord
{
get{return _PassWord;}
set{_PassWord=value;}
}
public void Initial(string nUserID,string nPassWord)
{
UserID=nUserID;
PassWord=nPassWord;
}
public bool IsValid(string nUserID,string nPassWord,out string nMsg)
{
nMsg="";
try
{
//判断用户名密码是否正确
if(nUserID == "admin" && nPassWord == "admin")
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);
}
}
2. 在Web Services使用 SoapHeader 自定义属性定义一组关联的标头,服务中的每个 WebMethod 都可以使用.(默认情况下,标头是必需的,但也可以定义可选标头)
Test.asmx代码片段:
public CredentialSoapHeader myHeader=new CredentialSoapHeader();
// WEB 服务示例
[SoapHeader("myHeader")]
[WebMethod(Description="加入了身份验证的web服务",EnableSession=true)]
public string HelloWorld (string contents)
{
string msg = "";
//验证是否有权访问
if(!myHeader.IsValid(out msg))
return msg;
return "Hello World:"+contents;
}
3. 最后客户端在调用要求标头的方法之前,需直接在代理类上设置标头。
以下是winform客户段代码片段:
SoapTest.Test test1 = new SoapHeader.SoapTest.Test();
//创建soap头对象
SoapTest.CredentialSoapHeader header = new SoapHeader.SoapTest.CredentialSoapHeader();
//设置soap头变量
header.PassWord = "admin";
header.UserID = "admin1";
test1.CredentialSoapHeaderValue = header;
//调用web 方法
this.label1.Text = test1.HelloWorld ("wang");
通过以上步骤就可以完成Web Services自定义身份验证了.
该方案的优点是代码灵活,便于移植,缺点是传递的信息没有加密,可配合SSL进行使用。
解决方案二:通过集成windows身份验证。
1. 将web服务程序设为集成windows身份验证
2.客户端web引用代码
Test.WebReference.Service1 wr = new Test.WebReference.Service1(); //生成web service实例
wr.Credentials = new NetworkCredential("guest","123"); //guest是用户名,该用户需要有一定的权限
lblTest.Text = wr.Add(2,2).ToString(); //调用web service方法
该方案的优点是比较安全,性能较好,缺点是不便于移植,部署工作量大。
----------------------------------------
P.S. 下面的资料也很有帮助:
Authentication for Web Services (using SOAP headers)
分享到:
相关推荐
Soap头身份验证Soap头身份验证Soap头身份验证Soap头身份验证
花了五天时间,终于做好了asp.net mvc后台管理系统...采用的了Form身份验证,WebServices,Linq,数据加密解密,Mztreeview1.0 解决了mvc传递中文字符的问题 参考: http://www.cnblogs.com/qiaojun/articles/1436235.html
这是我在学校时候做的一个WebServices课题,包含了基本的WebServices应用,身份验证等功能。 服务器用C#语言。 客户端采用PHP+NuSoap来实现。 附加mysql数据库的sql文件。 方便新手入门。
本示例使用C#构造SOAP信息,通过HttpWebRequest调用java编写的带有Windows身份验证的WebService,代码中详细注释了每行代码的功能与作用; 对应文章:http://blog.csdn.net/cgs_______/article/details/77894599
适用于Python 库的Amazon Web Services版本4身份验证。 特征 请求对所有支持AWS auth v4的AWS服务进行身份验证 独立签名关键对象 超过范围日期边界时自动重新生成键 支持STS临时凭证 实现基于标头的身份验证,不支持...
该书通常会涵盖以下内容: ...安全和身份验证: 探讨如何确保 Web 服务的安全性,包括身份验证、授权、加密等方面的技术和实践。 性能优化和调试: 提供优化 Web 服务性能和调试技巧的实用建议和方法。
使用JWT(JSON Web令牌)与Netuno Services Authentication集成的客户端。 有关更多信息。 该模块使在Web应用程序中轻松支持JWT变得容易。 登录后,将自动加载Authorization标头。 这样,任何_service(...)调用...
Web Services 面对的主要威胁和攻击 未授权的访问 漏洞 可导致通过 Web Services 进行未授权的访问的漏洞包括: 未使用身份验证 密码在 SOAP 头信息中以明文形式传递 在未加密的通信通道中使用基本身份验证 Web...
springboot-jwt-security Spring Boot示例应用程序,使用JWT(Json Web令牌)安全性身份验证来保护Rest Web Services 登录(获取令牌) 访问Echo API 访问用户API 越权存取
Web Services 面对的主要威胁和攻击 未授权的访问 漏洞 可导致通过 Web Services 进行未授权的访问的漏洞包括: 未使用身份验证 密码在 SOAP 头信息中以明文形式传递 在未加密的通信通道中使用基本身份验证 Web...
云安全审核 Amazon Web Services的命令行安全审核工具 ...如果您使用的是MFA,则在尝试使用标志--mfa进行连接之前,需要告诉Cloud Security Audit对您进行身份验证。 例: $ cloud-security-audit --s
在IIS服务器中,常用的身份验证方式有基本身份验证、摘要式身份验证、Windows 身份验证等。我们可以根据实际情况要求选择合适的身份验证方式。 IIS权限配置 4、禁止匿名访问 在IIS管理器中,可以在“身份验证”里,...
作为Java应用程序运行com.in28minutes.rest.webservices.restfulwebservices.RestfulWebServicesApplication 。 检查身份验证和REST API部分以执行REST API。 React Application-将frontend/todo-app导入Visual ...
XFFirebaseAuthExample 是Xamarin.Forms Droid和iOS应用程序的示例,该应用程序通过Firebase用户进行身份验证,并使用Firebase OAuthToken使用受保护的.NET Core WEB API后端。 除此之外,您还将找到以下示例: 使用...
EC2的Bastillion ... Google身份验证器 要与码头捆绑在一起 下载bastillion-ec2-jetty-vXX.XX.tar.gz 导出环境变量 适用于Linux / Unix / OSX export JAVA_HOME=/path/to/jdk export PATH=$JAVA_HOM
RESTFUL_Webservices_with-AngularJS 这是一个宁静的Web服务,在前端使用AngularJS。 系统体系结构设计:为了简单起见,我们不包括身份验证。 要求: *用户可以注册。 *用户可以更新信息*用户可以删除信息*用户可以...
Perl Web服务是Apache服务器和Web浏览器的一组API,可帮助开发Web应用程序。 它包括对用户会话和身份验证的支持,以及服务器和客户端上的特定于用户的数据(cookie)。
Alchemy 休息客户端生成器演示 ... root - jersey webservices 使用胶水将 guice 依赖注入与 jersey 集成 贡献 如果您不熟悉为开源项目做贡献,请参阅。 作出贡献的要点是 创建主题分支 - git checkout -b 进行更
用PHP / SQL编写的基于Web的应用程序。 一些包括; 身份验证脚本,完整且广泛的rrdtool前端,HTTP / PHP上传管理代码以及当前正在使用的动态学区网站。
通过分析现有的单点登录模型的优缺点,结合Webservice、Cookie及HTTP重定向等关键技术,提出了代理和经纪人模型,解决了统一身份认证和异步验证两大比较核心的问题。同时,由于HTTP重定向技术以及RSA加密技术的采用,使本...