91网首页-91网页版-91网在线观看-91网站免费观看-91网站永久视频-91网站在线播放

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# WebService 3 種身份驗(yàn)證方式總結(jié)和對(duì)比


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

前言

嘿,大家好!

你使用過(guò) WebService 嗎?

WebService 就像是一座連接不同系統(tǒng)的小橋,通過(guò) SOAP 或 REST 技術(shù)讓數(shù)據(jù)在這座橋上自由穿梭。無(wú)論是分享天氣預(yù)報(bào),還是交換訂單信息,WebService 都是實(shí)現(xiàn)這些數(shù)據(jù)交互的幕后英雄。

就像任何橋梁都需要護(hù)欄來(lái)保證行人安全一樣,WebService 也需要一些保護(hù)措施來(lái)確保數(shù)據(jù)的安全傳輸。

而身份驗(yàn)證就是這座橋上的“護(hù)欄”,它能防止未經(jīng)授權(quán)的訪問(wèn),確保只有合法用戶才能通過(guò)。

無(wú)論是簡(jiǎn)單的用戶名密碼驗(yàn)證,還是更復(fù)雜的 JWT 驗(yàn)證,C# 都提供了靈活的方式來(lái)實(shí)現(xiàn)。

接下來(lái),我們就來(lái)看看如何在 C# 中實(shí)現(xiàn)它們。

準(zhǔn)備好了嗎?

1. SOAP 協(xié)議自定義驗(yàn)證

SOAP 協(xié)議允許在消息頭部(Header)中添加自定義信息,所以我們可以利用這一點(diǎn)來(lái)實(shí)現(xiàn)身份驗(yàn)證。

實(shí)現(xiàn)步驟:

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

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

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

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

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

優(yōu)點(diǎn):

  • 簡(jiǎn)單,容易實(shí)現(xiàn)
  • 適用于 SOAP 協(xié)議

缺點(diǎn):

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

2. HTTP Basic 認(rèn)證

HTTP Basic 認(rèn)證是一種簡(jiǎn)單的身份驗(yàn)證方式,客戶端將用戶名和密碼以 Base64 編碼的形式發(fā)送到服務(wù)端。

實(shí)現(xiàn)步驟:

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

    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); // 輸出:驗(yàn)證成功!這是敏感數(shù)據(jù)ABCDE
  2. 服務(wù)端解碼并驗(yàn)證憑據(jù)

    [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"驗(yàn)證成功!這是敏感數(shù)據(jù)ABCDE";
                }
            }

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

優(yōu)點(diǎn):

  • 與第一種方法一樣,實(shí)現(xiàn)起來(lái)也比較簡(jiǎn)單
  • 適用于 RESTful 服務(wù)。

缺點(diǎn):

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

集成 JWT

C# WebService 沒(méi)有內(nèi)置 JWT 支持,但對(duì)于更復(fù)雜的場(chǎng)景,可以通過(guò)集成第三方包來(lái)使用 JWT 實(shí)現(xiàn)身份驗(yàn)證

實(shí)現(xiàn)步驟:

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

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

  2. 客戶端將 JWT 令牌添加到請(qǐng)求頭

    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); // 輸出:驗(yàn)證成功!敏感數(shù)據(jù):12345
  3. 服務(wù)端驗(yàn)證 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"驗(yàn)證成功!敏感數(shù)據(jù):12345";
                }
                catch
                {
                    thrownew SoapException("身份驗(yàn)證失敗", SoapException.ClientFaultCode);
                }
            }

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

優(yōu)點(diǎn):

  • 安全性高,適合分布式系統(tǒng)
  • 支持令牌過(guò)期和刷新

缺點(diǎn):

  • 相比前2種方法,實(shí)現(xiàn)復(fù)雜度較高
  • 需要第三方庫(kù)支持,如 System.IdentityModel.Tokens.Jwt

總結(jié)

本文我們一起探討了 C# WebService 實(shí)現(xiàn)身份驗(yàn)證的3種方式:

  • 如果只是簡(jiǎn)單的驗(yàn)證,可以使用 SOAP 或 HTTP 基本認(rèn)證
  • 如果需要更高的安全性,建議使用 JWT 或者其他方法

當(dāng)然,無(wú)論哪種方式,建議最好都使用 HTTPS,保護(hù)傳輸?shù)陌踩浴?/span>


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

主站蜘蛛池模板: 国产一区二区在 | 日韩新片网在线精品 | 国产伦理一区二区 | 国产绿帽性爱一区 | 国产萝控精品福利 | 91一二三区 | 九九热国产视频 | 欧美影院一区 | 91国精在线| 绿巨人视频污app | 91青青青青青爽 | 国产在线ts人妖 | 日韩欧美高清一区 | 成人一区二区电影 | 国产精品一区二区亚 | 国产精品一线 | 欧美亚洲卡 | 国产在线2025 | 国产区日韩区欧美区 | 91福利在线导航 | 国产日韩欧美高清 | 日韩欧美国产另 | 女同在线视频一区 | 国产综合精品一区二 | 午夜一级免费视频 | 午夜福利日韩在线 | 成人午夜在线小视频 | 欧美日韩不卡高 | 成人拍拍拍社区 | 91伊人网| 国色天香天天影院综 | 精品一区在线观看 | 91蜜桃视频| 国内精品 | 国产高清视频在线观 | 福利导航99| 欧美性:生活视频 | 日韩精品真| 国产人成中文字幕 | 91系列在线观看免 | 日本欧美大 |