webservice常用兩種身份驗證方式


在項目開發,我們經常會使用WebService,但在使用WebService時我們經常會考慮以下問題:怎么防止別人訪問我的WebService?從哪里引用我的WebService?對於第一個問題,就涉及到了WebService是安全問題,因為我們提供的WebService不是允許所有人能引用 的,可能只允許本公司或者是通過授權的人才能使用的。那怎么防止非法用戶訪問呢?很容易想到通過一組用戶名與密碼來防止非法用戶的調用 。

 

方式一:通過SOAP Header身份驗證。

1.我們實現一個用於身份驗證的類,文件名MySoapHeader.cs 

MySoapHeader類繼承自System.Web.Services.Protocols.SoapHeader。且定義了兩個成員變量,UserName和PassWord,還定義了一個用戶認證的函數ValideUser。它提供了對UserName和PassWord檢查的功能

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.Services;
using System.Web.Services.Protocols;
/// <summary>
///MySoapHeader 的摘要說明
/// </summary>
public class MySoapHeader:SoapHeader
{
    public MySoapHeader()
    {
        //
        //TODO: 在此處添加構造函數邏輯
        //
    }
    public string UserName;
    public string PassWord;
    public bool ValideUser(string in_UserName, string in_PassWord)  
    {
        if ((in_UserName == "admin") && (in_PassWord == "123456"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

 

2.下面我們創建WebService.asmx    WebService.cs代碼如下:

using System;
using System.Collections;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
/// <summary>
///WebService 的摘要說明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService
{
    public WebService()
    {
        //如果使用設計的組件,請取消注釋以下行 
        //InitializeComponent(); 
    }
    public MySoapHeader header; ////定義用戶身份驗證類變量header
    [WebMethod(Description = "用戶驗證測試")]
    [System.Web.Services.Protocols.SoapHeader("header")]//用戶身份驗證的soap頭 
    public string HelloWorld(string contents)
    {
        //驗證是否有權訪問 
        if (header.ValideUser(header.UserName, header.PassWord))
        {
            return contents + "執行了";
        }
        else
        {
            return "您沒有權限訪問";
        }
    }
}

 

3.客戶端 創建個Default.aspx 

Default.aspx .cs代碼

using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        com.cn1yw.WebService test = new com.cn1yw.WebService();//web引用(改成您自己的)
        com.cn1yw.MySoapHeader Header = new com.cn1yw.MySoapHeader();//web引用創建soap頭對象(改成您自己的)
        //設置soap頭變量
        Header.UserName = "admin";
        Header.PassWord = "123456";
        test.MySoapHeaderValue = Header;
        //調用web 方法
        Response.Write(test.HelloWorld("i am administrator..."));
    }
}

 

解決方案二:通過集成windows身份驗證。

1. 將web服務程序設為集成windows身份驗證  
2.客戶端web引用代碼

Test.WebReference.Service1 wr = new Test.WebReference.Service1(); //生成web service實例 
wr.Credentials = new NetworkCredential("admsp", "admsp@sp123", "computer01-global"); //(用戶名,密碼,域)admsp是用戶名,該用戶需要有一定的權限 
lblTest.Text = wr.Add(2,2).ToString(); //調用web service方法

該方案的優點是比較安全,性能較好,缺點是不便於移植,部署工作量大。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM