Web Services的身份验证

  Web Services 的身份验证

引言

   随着 Web Service 的出现,其应用也是越来越广,同时也深受开发者的喜爱。下面我将引用一个实际应用例子说明本文的目的。

   假设有一个网上购物系统 LiveShopping 。在 LiveShopping 上,当客户已经选好他自己想买的商品之后,接下来就该付帐了。 LiveShopping 可以直接用信用卡付帐。另外假设 LiveShopping 的电子付款是与 VeriSign 合作。也就是说 LiveShopping VeriSign 的一个客户。假设 VeriSign 提供了一些 Web Services LiveShopping 使用。假设这些方法是:

1)  VerifyCC(string cc_no,string expire_date,float amt)

2)  ProcessCC(string transaction_type, string cc_no,string expire_date,float amt,CardHolder holder)

  其中方法 1 验证信用卡是否有效,方法 2 是一个 Transaction ,将从信用卡上划出 amt 数额的交易款。

参数说明

cc_no 信用卡卡号码

expire-date 有效日期

amt  金额

transaction_type 事务类型,比如说 sale force 等等

holder 持卡人信息

 

  这里有个问题,如果 VeriSign 没有身份验证,那怎么知道客户是 LiveShopping 。换句话说,如果没有身份验证,每个人都可以使用这两个方法。所以身份验证必不可少。

实现身份验证

   身份验证有很多方法,这里将介绍一种非常简单的方法,并且在 .NET 中实现。

   可以应用 WebService Soap 头实现。也就是说可以利用 Soap 头传递验证的信息,比如用户名,密码等等。

首先从客户端看,可以对其应用有一个直观的了解。代码如下

  private void Button1_Click (object sender , System .EventArgs e )

              {

                     AuthHeader auth =new AuthHeader ();

                     WebServices webService =new WebServices ();

                     auth .UserName =this .txtName .Text .Trim ();

                     auth .Password =this .txtPwd .Text .Trim ();

                     webService .authHeader =auth ;

                  string rtStr =webService .GetPassword ();

                     this .txtReturn .Text =rtStr ;

}

   解释一下, AuthHeader 为前面提及的 Soap 头的实现,其定义如下:

    public class AuthHeader :SoapHeader

       {

              public string UserName ;

              public string Password ;

       }

 

继续看看 WebServices 是如何实现的,代码如下:

       public class WebServices : System .Web .Services .WebService

       {

              public AuthHeader authHeader ;

              [SoapHeader ("authHeader")]

              [WebMethod ( Description ="This method will return the sensitive data")]

              public string GetPassword ()

              {

                     if (authHeader .UserName .Equals ("user") &&authHeader .Password .Equals ("pwd"))

                     {

                            return "pwd";

                     }

                     return "Invalid Authentication ";

              }

       }

可以发现,加入了一个 AuthHeader 公共成员。这个可以供调用者传输验证信息。另外重要的一点是 SoapHeader 属性,它明确了 Soap 头。具体可以参见 MSDN

  GetPassword ()中,可以加入你的代码。它第一步就是验证信息,如果验证成功,继续完成你的事情,如果不成功,则退出。

进一步

  如果为了使应用更加安全,我们可以对数据进行加密,比如说我们可以对验证信息进行加密。可以在客户端进行加密,然后到了 server 端进行解密。加密和解密是另外一个话题,在这里不多假描述。

  从性能方面来看,加密解密这个过程将会降低性能。所以一般可以折中考虑,只对于一些敏感的数据进行加密和解密,比如说密码等。除非是一些高安全性的应用,这时就另当别论了。

发布了42 篇原创文章 · 获赞 3 · 访问量 14万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章