.Net WebService基於SoapHeader實現安全認證

主要是接收android傳遞的數據容易受到誤導,多留意參數變化。
一、新增一個類MySoapHeader

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services.Protocols;

namespace WebDemo
{
    public class MySoapHeader : SoapHeader
    {
        public MySoapHeader() { }
        public string UserName { get; set; }
        public string PassWord { get; set; }
        public bool ValideUser(string Account, string PassWord)
        {
            if ((Account == "SoapHeader") && (PassWord == "123456"))
                return true;
            else
                return false;
        }
    }
}

2、在WebService類中使用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Configuration;
using System.Web.Script.Services;
using System.Web.Services;
using System.Web.Services.Protocols;

namespace WebDemo
{
    /// <summary>
    /// WebService 的摘要說明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消註釋以下行。 
    [System.Web.Script.Services.ScriptService]
    public class WebService : System.Web.Services.WebService
    {
        public WebService()
        {  
            HttpBrowserCapabilities myBrowserCaps = Context.Request.Browser;
            //判斷是否爲移動設備
            if (((HttpCapabilitiesBase)myBrowserCaps).IsMobileDevice)
            {
                header = new MySoapHeader();
                header.UserName = Context.Request["HTTP_ACCOUNT"];//帳號
                header.PassWord = Context.Request["HTTP_PASSWORD"];//密碼
            }
        }

        public MySoapHeader header; ////定義用戶身份驗證類變量header
        [WebMethod(Description = "用戶WebService基於SoapHeader實現安全認證測試")]
        [SoapHeader("header")]//用戶身份驗證的soap頭 
        public string HelloWorld(string contents)
        {
            //驗證是否有權訪問
            if (header.ValideUser(header.UserName, header.PassWord))
                return "訪問成功";
            else
                return "您沒有權限訪問!";
        }
    }
}

3、android調用
獲取android傳遞的帳號和密碼,設定獲取帳號的Key爲”HTTP_ACCOUNT”,但是android傳遞參數的名稱是沒有”HTTP_”的,即account即可,密碼也是如此。
我們查看下android調用部分代碼:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RequestParams params = getParams();
        params.addBodyParameter("contents", "Hello World!");
        new HttpUtils(1500).send(HttpMethod.POST,
                "http://192.168.1.106:105/WebService.asmx/HelloWorld", params,
                new RequestCallBack<string>() {

                    @Override
                    public void onFailure(HttpException arg0, String arg1) {
                        // TODO 自動生成的方法存根
                        LogUtils.d("login----------------------" + arg0);
                    }

                    @Override
                    public void onSuccess(ResponseInfo<string> arg0) {
                        // TODO 自動生成的方法存根
                        LogUtils.d("login----------------------" + arg0.result);
                    }
                });

    }

    public RequestParams getParams() {
        RequestParams params = new RequestParams();
         params.addHeader("account", "SoapHeader");
         params.addHeader("password", "456789");
        return params;
    }

4、PC調用
記得添加服務引用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebDemo.ServiceReference;

namespace WebDemo
{
    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ServiceReference.WebServiceSoapClient sc = new WebServiceSoapClient();
            ServiceReference.MySoapHeader Header = new ServiceReference.MySoapHeader();
            Header.UserName = "SoapHeader";
            Header.PassWord = "456789";
            string s = sc.HelloWorld(Header,"Hello World!");
            Response.Write(s);
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章