首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WSE 3.0 構建 Web 服務安全(一):安全機制架構與入門實例

     編輯:關於.NET

系列規劃

《WCF 分布式必備知識》後續系列,共 5 篇:

  1. WSE 3.0 框架介紹
  2. 安全基本概念
  3. 下載與安裝
  4. 代碼實現與分析
  5. 總結

附完整可運行源碼與詳細註釋。

一、WSE 3.0 框架介紹

WSE 3.0 = Web Services Enhancements 3.0,微軟針對 Web Service 的安全實現平台,含認證加密專用類庫。許多設計映射到後來的 WCF。

Web Service 2.0 基線

支援 WS-I Basic Profile 1.1、SOAP 1.2、XML 1.0、XSD、WSDL。

WSE 3.0 四大增強特性

  1. 訊息層安全 (WS-Security):支援 WS-* 協議棧(WS-Policy、WS-Trust、WS-SecureConversation)
  2. 高效二進制傳輸 (MTOM):Message Transmission Optimization Mechanism
  3. 多宿主環境:IIS 外託管(Console、Windows Service 等)
  4. 自定義聲明性策略管道:攔截器模型,輕鬆擴展預處理/後處理

WS-* 協議棧圖解

WS-* 協議棧
  • WS-Policy:表達/交換信任聲明
  • WS-Trust:定義信任關係行為、安全令牌服務 (STS) 介面
  • WS-SecureConversation:基於令牌建立安全會話上下文

策略管道優勢

比舊 SoapExtension 更易用,可創建與內建聲明性策略結合的自定義策略。另含 SOAP 訊息診斷追蹤。

二、安全基本概念

加密三大目標

  1. 機密性:對稱加密(同鑰)vs 非對稱加密(公私鑰)
  2. 完整性:HMAC/雜湊值驗證未竄改
  3. 身份驗證:數位證書/簽名

.NET 內建算法表

對稱非對稱雜湊
DES, TripleDES, Rijndael, RC2DSA, RSAMD5, SHA1/256/384/512, HMACSHA, MACTripleDES

對稱加密

單鑰加解密,快,但無法實現完整性與身份驗證。.NET 類:DES、TripleDES、Rijndael、RC2。

非對稱加密(公鑰加密)

公鑰公開、私鑰保密。公鑰加密→私鑰解密;私鑰簽名→公鑰驗證。.NET:DSACryptoServiceProvider、RSACryptoServiceProvider。

雜湊值

任意長度→固定長度唯一指紋。.NET:SHA*、MD5、HMACSHA、MACTripleDES。

數位簽名

綜合方案:雙方交換公鑰 → 生成對稱會話鑰加密訊息 → 雜湊訊息 → 對方公鑰加密「會話鑰+雜湊」作為簽名附加發送。

三、下載與安裝

  1. 下載 WSE 3.0,勾選 Tools、Samples、VS2005 插件
  2. 安裝截圖:安裝選項
  3. VS2005 緊密整合:專案右鍵見 WSE 3.0 Settings 專案右鍵選單
  4. 獨立工具目錄:工具目錄
    • WseWsdl3.exe WSDL 生成
    • WseConfigEditor3.exe 配置編輯器
    • X509Certificate3.exe 證書管理

注意:WSE 3.0 僅整合 VS2005。VS2008 內建 WCF,全面取代 WSE。

四、代碼實現:UsernameToken 簡單認證

架構:三專案

  • Web Service 專案
  • UsernameTokenManager 類庫
  • Client 測試專案

1. 自定義 UsernameTokenManager

public class MyUsernameTokenManager : UsernameTokenManager {
    protected override string AuthenticateToken(UsernameToken token) {
        // 這裡可查資料庫、複雜業務驗證
        return "123456789"; // 返回預期密碼,WSE 會與 token 內密碼比對
    }
}

AuthenticateToken 為核心:WSE 反序列化 SOAP Header 獲取 UsernameToken → 調用此方法取預期密碼 → 比對驗證。

2. 服務端極簡

[WebService(Namespace = "https://www.cnblogs.com/frank_xl/")]
public class Service : WebService {
    [WebMethod]
    public string HelloWorld() => "Hello Guys, I 'm Frank Xu Lei";
}

3. 客戶端調用

var proxy = new ServiceWse();
var token = new UsernameToken("FrankXu", "123456789", PasswordOption.SendPlainText);
proxy.SetClientCredential(token);
// proxy.SetPolicy("ClientPolicy"); // 此處暫不啟用策略
string result = proxy.HelloWorld();
調用成功

五、總結

  • 每專案必須引用 Microsoft.Web.Services3.dll
  • 本例展示最基礎 UsernameToken 機制:客戶端加密→服務端 AuthenticateToken 驗證
  • 下節進入策略配置實現更強安全(簽名、加密、證書)

本文附源碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved