zoukankan      html  css  js  c++  java
  • 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端进行解密。加密和解密是另外一个话题,在这里不多假描述。

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

  • 相关阅读:
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第三节 梯度下降法 (上)理解篇
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第二节 线性回归算法 (下)实操篇
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第二节 线性回归算法 (上)理解篇
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第一节 KNN算法 (下)实操篇
    萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第一节 KNN算法 (上)理解篇
    萌新向Python数据分析及数据挖掘 第二章 pandas 第五节 Getting Started with pandas
    Oracle数据库安装和授权
    c# 如何获取JSON文件以及如何获取Config文件(framework 和 net .Core)
    C#Core查询数据库存储EXCEL文件
    如何在WINDOW系统下编译P12证书制作
  • 原文地址:https://www.cnblogs.com/confach/p/296103.html
Copyright © 2011-2022 走看看