WebService SoapHeader的使用
廣告:
7.9 如何保證Web Service的安全
要以安全的方式訪問Web服務方法,可以考慮以下安全措施:
是誰調用?--SoapHeader身份認證。
來自哪里?--訪問IP認證。
加密傳輸 --SSL安全訪問。
這些安全保護措施常常是配合使用的。
7.9.1 通過SoapHeader來增強Web Service的安全性
通過SoapHeader我們可以讓具有指定用戶口令的用戶來訪問我們的Web服務接口。(完整代碼示例位置:光盤\code\ch07\WebAppClient\WebForm-SoapHeader.aspx)
1.Web Service實現步驟
(1)定義自己的SoapHeader派生類。
//<summary>
//定義自己的SoapHeader派生類
//</summary>
publicclassMySoapHeader:System.Web.Services.Protocols.SoapHeader
{
privatestring_UserID=string.Empty;
privatestring_PassWord=string.Empty;
//<summary>
//構造函數
//</summary>
publicMySoapHeader()
{
}
//<summary>
//構造函數
//</summary>
//<paramname="nUserID">用戶ID</param>
//<paramname="nPassWord">加密后的密碼</param>
publicMySoapHeader(stringnUserID,stringnPassWord)
{
Initial(nUserID,nPassWord);
}
#region屬性
//<summary>
//用戶名
//</summary>
publicstringUserID
{
get{return_UserID;}
set{_UserID=value;}
}
//<summary>
//加密后的密碼
//</summary>
publicstringPassWord
{
get{return_PassWord;}
set{_PassWord=value;}
}
#endregion
#region方法
//<summary>
//初始化
//</summary>
//<paramname="nUserID">用戶ID</param>
//<paramname="nPassWord">加密后的密碼</param>
privatevoidInitial(stringnUserID,stringnPassWord)
{
UserID=nUserID;
PassWord=nPassWord;
}
//<summary>
//驗證用戶名密碼是否正確
//</summary>
//<paramname="nUserID">用戶ID</param>
//<paramname="nPassWord">加密后的密碼</param>
//<paramname="nMsg">返回的錯誤信息</param>
//<returns>用戶名密碼是否正確</returns>
privateboolIsValid(stringnUserID,stringnPassWord,outstringnMsg)
{
nMsg="";
try
{
//判斷用戶名密碼是否正確
if(nUserID=="admin"&&nPassWord=="admin")
{
returntrue;
}
else
{
nMsg="對不起,你無權調用此Web服務。";
returnfalse;
}
}
catch
{
nMsg="對不起,你無權調用此Web服務。";
returnfalse;
}
}
//<summary>
//驗證用戶名密碼是否正確
//</summary>
//<returns>用戶名密碼是否正確</returns>
publicboolIsValid(outstringnMsg)
{
returnIsValid(_UserID,_PassWord,outnMsg);
}
#endregion
}
(2)添加基于SoapHeader驗證的Web Service接口方法:
//<summary>
//通過SoapHeader來增強WebService的安全性
//</summary>
[WebService(Namespace="[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
publicclassWebService_Soap:System.Web.Services.WebService
{
//聲明Soap頭實例
publicMySoapHeadermyHeader=newMySoapHeader();
//普通方法,不需要SoapHeader驗證
[WebMethod(Description="根據產品編號查詢產品的價格")]
publicstringGetProductPrice(stringProductId)
{
Productspro=newProducts();
returnpro.GetPrice(ProductId);
}
//需要SoapHeader驗證
[SoapHeader("myHeader")]
[WebMethod(Description="根據產品編號查詢產品的價格",EnableSession=true)]
publicstringGetProductPrice2(stringProductId)
{
stringmsg="";
//驗證是否有權訪問
if(!myHeader.IsValid(outmsg))
{
returnmsg;//返回錯誤信息
}
Productspro=newProducts();
returnpro.GetPrice(ProductId);
}
}
2.客戶端調用具有SoapHeader的Web Service
//創建myService對象
ProductServiceSoap.WebService_Soapservice=
newProductServiceSoap.WebService_Soap();
//創建soap頭對象
ProductServiceSoap.MySoapHeaderheader=newProductServiceSoap.MySoapHeader();
//設置soap頭變量
header.PassWord="admin";
header.UserID="admin";
service.MySoapHeaderValue=header;
//調用web方法
stringstrPrice=service.GetProductPrice2("001");
通過SoapHeader對用戶口令進行驗證,只有授權的用戶才可以使用該接口。確保了訪問接口用戶的安全性。
廣告: