• Web Services的身份验证


     

                                   Web Services的身份验证

    引言

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

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

    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中实现。

       可以应用WebServiceSoap 头实现。也就是说可以利用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端进行解密。加密和解密是另外一个话题,在这里不多假描述。

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

  • 相关阅读:
    C#线程优先级浅析
    Android常用组件
    Android 内存监测工具 DDMS --> Heap
    Android 十个非常漂亮的常用组件
    RelativeLayout 相对布局 常用属性
    Android 关于横竖屏
    (转)Android 之 StrictMode 介绍
    Android如何获取SIM卡信息
    Android 读SIM卡信息
    Android Camera 使用小结
  • 原文地址:https://www.cnblogs.com/confach/p/296103.html
Copyright © 2020-2023  润新知