要以安全的方式访问Web服务方法,可以考虑以下安全措施:
l 是谁调用?——SoapHeader身份认证。
l 来自哪里?——访问IP认证。
l 加密传输 ——SSL安全访问。
这些安全保护措施常常是配合使用的。
7.9.1 通过SoapHeader来增强Web Service的安全性
通过SoapHeader我们可以让具有指定用户口令的用户来访问我们的Web服务接口。(完整代码示例位置:光盘\code\ch07\WebAppClient\WebForm-SoapHeader.aspx)
1.Web Service实现步骤
(1)定义自己的SoapHeader派生类。
//<summary>
//定义自己的SoapHeader派生类
//</summary>
public class MySoapHeader : System.Web.Services.Protocols.SoapHeader
{
private string _UserID = string.Empty;
private string _PassWord = string.Empty;
//<summary>
//构造函数
//</summary>
public MySoapHeader()
{
}
//<summary>
//构造函数
//</summary>
//<param name="nUserID">用户ID</param>
//<param name="nPassWord">加密后的密码</param>
public MySoapHeader(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>
private 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>
private bool IsValid(string nUserID, string nPassWord, out string nMsg)
{
nMsg = "";
try
{
//判断用户名密码是否正确
if (nUserID == "admin" && nPassWord == "admin")
{
return true;
}
else
{
nMsg = "对不起,你无权调用此Web服务。";
return false;
}
}
catch
{
nMsg = "对不起,你无权调用此Web服务。";
return false;
}
}
//<summary>
//验证用户名密码是否正确
//</summary>
//<returns>用户名密码是否正确</returns>
public bool IsValid(out string nMsg)
{
return IsValid(_UserID, _PassWord, out nMsg);
}
#endregion
}
(2)添加基于SoapHeader验证的Web Service接口方法:
//<summary>
//通过SoapHeader来增强Web Service的安全性
//</summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class WebService_Soap : System.Web.Services.WebService
{
//声明Soap头实例
public MySoapHeader myHeader = new MySoapHeader();
//普通方法,不需要SoapHeader验证
[WebMethod(Description = "根据产品编号查询产品的价格")]
public string GetProductPrice(string ProductId)
{
Products pro = new Products();
return pro.GetPrice(ProductId);
}
//需要SoapHeader验证
[SoapHeader("myHeader")]
[WebMethod(Description="根据产品编号查询产品的价格", EnableSession = true)]
public string GetProductPrice2(string ProductId)
{
string msg = "";
//验证是否有权访问
if (!myHeader.IsValid(out msg))
{
return msg;//返回错误信息
}
Products pro = new Products();
return pro.GetPrice(ProductId);
}
}
2.客户端调用具有SoapHeader的Web Service
//创建myService对象
ProductServiceSoap.WebService_Soap service = new ProductServiceSoap.WebService_Soap();
//创建soap头对象
ProductServiceSoap.MySoapHeader header=new ProductServiceSoap.MySoapHeader();
//设置soap头变量
header.PassWord = "admin";
header.UserID = "admin";
service.MySoapHeaderValue = header;
//调用web 方法
string strPrice = service.GetProductPrice2("001");
通过SoapHeader对用户口令进行验证,只有授权的用户才可以使用该接口。确保了访问接口用户的安全性。
7.9.2 采用SSL实现加密传输
在默认情况下,IIS使用HTTP协议以明文形式传输数据,Web Service就是使用HTTP协议进行数据传输的。Web Service传输的数据是XML格式的明文。没有采取任何加密措施,用户的重要数据很容易被窃取,如何才能保护网络中传递的这些重要数据呢?
SSL(Security Socket Layer)的中文全称是加密套接字协议层,它位于HTTP协议层和TCP协议层之间,用于建立用户与服务器之间的加密通信,确保所传递信息的安全性,同时SSL安全机制是依靠数字证书来实现的。
SSL基于公用密钥和私人密钥,用户使用公用密钥来加密数据,但解密数据必须使用相应的私人密钥。使用SSL安全机制的通信过程如下:用户与IIS服务器建立连接后,服务器会把数字证书与公用密钥发送给用户,用户端生成会话密钥,并用公共密钥对会话密钥进行加密,然后传递给服务器,服务器端用私人密钥进行解密,这样,用户端和服务器端就建立了一条安全通道,只有SSL允许的用户才能与IIS服务器进行通信。
SSL网站不同于一般的Web站点,它使用的是“HTTPS”协议,而不是普通的“HTTP”协议。因此它的URL(统一资源定位器)格式为“https://网站域名”。
实现步骤以后更新。
今天的文章如何保证Web Service的安全分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/23928.html