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

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

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


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

前言

嘿,大家好!

你使用過(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),確保只有合法用戶(hù)才能通過(guò)。

無(wú)論是簡(jiǎn)單的用戶(hù)名密碼驗(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. 在客戶(hù)端,將用戶(hù)名和密碼添加到 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)證方式,客戶(hù)端將用戶(hù)名和密碼以 Base64 編碼的形式發(fā)送到服務(wù)端。

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

  1. 客戶(hù)端將用戶(hù)名和密碼編碼后添加到 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. 客戶(hù)端通過(guò)登錄接口獲取 JWT 令牌。

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

  2. 客戶(hù)端將 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)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(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í)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品手机在线 | 成人福利精品在线 | 91桃色| 国产美女在线观看 | 日本色色的视频一区 | 成人午夜三 | 日韩高清va视频 | 欧美亚洲国产 | 国产黑料导航网福利 | 人成a大片在线观看 | 国产永久在线观看 | 91日韩欧美| 国产欧美精品久 | 国产亚洲无 | 日韩欧美国产 | 国产精品人成 | 国产自产免费在线 | 日本aⅴ精品 | 国产精品视频分类 | 福利微拍三区 | 国产激情一区在线观 | 九九精品视频亚州 | 成人a大片高 | 日韩国产乱 | 欧美午夜高清在线 | 成人做爰黄级a | 欧洲亚洲一区二 | 国内精品国产成 | 日韩国产福利 | 成人宗合| 日韩精品国产一级 | 国产亚洲制服 | 国产情侣露脸 | 国产免费看视频 | 国产极品喷 | 99精品热| 国产综合色在 | 欧亚天堂在线播放 | 91午夜激情 | 91热这里只有精品 | 日韩中文精品视频 |