欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# WebService 3 種身份驗證方式總結和對比


2025年3月15日 9:16 本文熱度 287

前言

嘿,大家好!

你使用過 WebService 嗎?

WebService 就像是一座連接不同系統的小橋,通過 SOAP 或 REST 技術讓數據在這座橋上自由穿梭。無論是分享天氣預報,還是交換訂單信息,WebService 都是實現這些數據交互的幕后英雄。

就像任何橋梁都需要護欄來保證行人安全一樣,WebService 也需要一些保護措施來確保數據的安全傳輸。

而身份驗證就是這座橋上的“護欄”,它能防止未經授權的訪問,確保只有合法用戶才能通過。

無論是簡單的用戶名密碼驗證,還是更復雜的 JWT 驗證,C# 都提供了靈活的方式來實現。

接下來,我們就來看看如何在 C# 中實現它們。

準備好了嗎?

1. SOAP 協議自定義驗證

SOAP 協議允許在消息頭部(Header)中添加自定義信息,所以我們可以利用這一點來實現身份驗證。

實現步驟:

  1. 在客戶端,將用戶名和密碼添加到 SOAP 頭部

    var client = new MyWebService();
    client.Headers.Add("Username""admin");
    client.Headers.Add("Password""password");

    string result = client.SecureMethod();
    Console.WriteLine(result); // 輸出:驗證成功!敏感數據:12345
  2. 在服務端,解析 SOAP 頭部并驗證憑據

    [WebService(Namespace = "http://tempuri.org/")]
    publicclassMyWebService : WebService
    {
        [WebMethod]
        public string SecureMethod()
        {
            // 獲取 SOAP 頭部
            var headers = Context.Request.Headers;

            // 檢查頭部是否包含憑據
            if (headers["Username"] == "admin" && headers["Password"] == "password")
            {
                return"驗證成功!敏感數據:12345";
            }
            else
            {
                thrownew SoapException("身份驗證失敗", SoapException.ClientFaultCode);
            }
        }
    }

優點:

  • 簡單,容易實現
  • 適用于 SOAP 協議

缺點:

  • 安全性較低,憑據以明文傳輸,容易泄露
  • 需要手動處理頭部信息

2. HTTP Basic 認證

HTTP Basic 認證是一種簡單的身份驗證方式,客戶端將用戶名和密碼以 Base64 編碼的形式發送到服務端。

實現步驟:

  1. 客戶端將用戶名和密碼編碼后添加到 HTTP 請求頭

    var client = new HttpClient();
    var credentials = Convert.ToBase64String(Encoding.UTF8.GetBytes("admin:password"));
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);

    var response = await client.GetAsync("http://localhost:50448/MyWebService.asmx/SecureMethod");
    var result = await response.Content.ReadAsStringAsync();
    Console.WriteLine(result); // 輸出:驗證成功!這是敏感數據ABCDE
  2. 服務端解碼并驗證憑據

    [WebService(Namespace = "http://tempuri.org/")]
    publicclassMyWebService : WebService
    {
        [WebMethod]
        public string SecureMethod()
        {
            var authHeader = Context.Request.Headers["Authorization"];

            if (authHeader != null && authHeader.StartsWith("Basic"))
            {
                var encodedCredentials = authHeader.Substring("Basic ".Length).Trim();
                var credentials = Encoding.UTF8.GetString(Convert.FromBase64String(encodedCredentials));
                var parts = credentials.Split(':');
                var username = parts[0];
                var password = parts[1];

                if (username == "admin" && password == "password")
                {
                    return"驗證成功!這是敏感數據ABCDE";
                }
            }

            Context.Response.StatusCode = 401// 未授權
            Context.Response.AddHeader("WWW-Authenticate""Basic realm=\"MyWebService\"");
            return"身份驗證失敗";
        }
    }

優點:

  • 與第一種方法一樣,實現起來也比較簡單
  • 適用于 RESTful 服務。

缺點:

  • 安全性比第一種方法相比較好,但實際上 Base64 編碼容易被解碼,所以安全性也是比較低,最好使用 HTTPS 來保護傳輸安全

集成 JWT

C# WebService 沒有內置 JWT 支持,但對于更復雜的場景,可以通過集成第三方包來使用 JWT 實現身份驗證

實現步驟:

  1. 客戶端通過登錄接口獲取 JWT 令牌。

    代碼略,可參考以前文章《ASP.NET Core 標識(Identity)框架系列(二):使用標識(Identity)框架生成 JWT Token》的實現方法

  2. 客戶端將 JWT 令牌添加到請求頭

    var client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer""your_jwt_token");

    var response = await client.GetAsync("http://yourserver/MyWebService.asmx/SecureMethod");
    var result = await response.Content.ReadAsStringAsync();
    Console.WriteLine(result); // 輸出:驗證成功!敏感數據:12345
  3. 服務端驗證 JWT 令牌的有效性

    [WebService(Namespace = "http://tempuri.org/")]
    publicclassMyWebService : WebService
    {
        [WebMethod]
        public string SecureMethod()
        {
            var authHeader = Context.Request.Headers["Authorization"];

            if (authHeader != null && authHeader.StartsWith("Bearer"))
            {
                var token = authHeader.Substring("Bearer ".Length).Trim();
                var handler = new JwtSecurityTokenHandler();
                var validationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key")),
                    ValidateIssuer = false,
                    ValidateAudience = false
                };

                try
                {
                    var principal = handler.ValidateToken(token, validationParameters, out _);
                    return"驗證成功!敏感數據:12345";
                }
                catch
                {
                    thrownew SoapException("身份驗證失敗", SoapException.ClientFaultCode);
                }
            }

            thrownew SoapException("未提供令牌", SoapException.ClientFaultCode);
        }
    }

優點:

  • 安全性高,適合分布式系統
  • 支持令牌過期和刷新

缺點:

  • 相比前2種方法,實現復雜度較高
  • 需要第三方庫支持,如 System.IdentityModel.Tokens.Jwt

總結

本文我們一起探討了 C# WebService 實現身份驗證的3種方式:

  • 如果只是簡單的驗證,可以使用 SOAP 或 HTTP 基本認證。
  • 如果需要更高的安全性,建議使用 JWT 或者其他方法

當然,無論哪種方式,建議最好都使用 HTTPS,保護傳輸的安全性。


該文章在 2025/3/17 9:13:36 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved