找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

掃一掃,訪問微社區

只需一步,快速開始

ASP.NETCore編程實現基本認證

查看: 3805| 評論: 0| 發布者: 林羽凡

??? ??С
簡介:HTTP基本認證在HTTP中,HTTP基本認證(Basic Authentication)是一種允許瀏覽器或其他客戶端程序使用(用戶名,口令)請求資源的身份驗證方式,不要求cookie,session identifier、login page等標記或載體。 所有瀏覽 ...

ASP.NETCore編程實現基本認證

HTTP基本認證

HTTP中,HTTP基本認證(Basic Authentication)是一種允許瀏覽器或其他客戶端程序使用(用戶名,口令)請求資源的身份驗證方式,不要求cookie,session identifier、login page等標記或載體。

  • 所有瀏覽器據支持HTTP基本認證協議

  • 基本身證原理不保證傳輸憑證的安全性,僅被based64編碼,并沒有encrypted或者hashed,一般部署在互信的內網,在公網上應用BA協議通常與https結合。


BA標準協議

BA協議的實施主要依靠約定的請求頭/響應頭, 典型的瀏覽器和服務器的BA認證流程:

① 瀏覽器請求應用了BA的網站,服務端響應一個401認證失敗響應碼,并寫入WWW-Authenticate響應頭,指示服務端支持BA協議。
HTTP/1.1 401 UnauthorizedWWW-Authenticate: Basic realm="our site"

或在初次請求時發送正確Authorization標頭,從而避免被質詢


客戶端以based64(用戶名:口令) 作為Authorization標頭值,重新發送請求:

Authorization: Basic userid:password

ASP.NETCore編程實現基本認證

認證的范圍與realm相關,準確的realm由服務端定義,因為服務端可能有多個不同的realm.

> 瀏覽器客戶端,對于WWW-Authenticate響應頭彈出了口令輸入窗。

BA編程實踐

ASP.NET Core網站利用FileServerMiddleware將部分路徑映射到文件資源,對該資源訪問路徑應用Http基本認證。

服務端實現BA認證

① 實現基本認證Handler:認證、無口令質詢、質詢失敗邏輯
# ......namespace EqidManager.Services{ public static class BasicAuthenticationScheme { public const string DefaultScheme = "Basic"; } public class BasicAuthenticationOption:AuthenticationSchemeOptions { public string Realm { get; set; } public string UserName { get; set; } public string UserPwd { get; set; } }
public class BasicAuthenticationHandler : AuthenticationHandler { private readonly BasicAuthenticationOption authOptions; public BasicAuthenticationHandler( IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock) { authOptions = options.CurrentValue; }
/// /// 認證邏輯 /// protected override async Task HandleAuthenticateAsync { if (!Request.Headers.ContainsKey("Authorization")) return AuthenticateResult.Fail("Missing Authorization Header"); string username, password; try { var authHeader = AuthenticationHeaderValue.Parse(Request.Headers["Authorization"]); var credentialBytes = Convert.FromBase64String(authHeader.Parameter); var credentials = Encoding.UTF8.GetString(credentialBytes).Split(':'); username = credentials[0]; password = credentials[1]; var isValidUser= IsAuthorized(username,password); if(isValidUser== false) return AuthenticateResult.Fail("Invalid username or password"); } catch return AuthenticateResult.Fail("Invalid Authorization Header"); var claims = new { new Claim(ClaimTypes.NameIdentifier,username), new Claim(ClaimTypes.Name,username), }; var identity = new ClaimsIdentity(claims, Scheme.Name); var principal = new ClaimsPrincipal(identity); var ticket = new AuthenticationTicket(principal, Scheme.Name); return await Task.FromResult(AuthenticateResult.Success(ticket)); }
/// /// 質詢 /// protected override async Task HandleChallengeAsync(AuthenticationProperties properties) { Response.Headers["WWW-Authenticate"] = $"Basic realm=\\"{Options.Realm}\\""; await base.HandleChallengeAsync(properties); }
/// /// 認證失敗 /// protected override async Task HandleForbiddenAsync(AuthenticationProperties properties) { await base.HandleForbiddenAsync(properties); } private bool IsAuthorized(string username, string password) { return username.Equals(authOptions.UserName, StringComparison.InvariantCultureIgnoreCase) && password.Equals(authOptions.UserPwd); } }}

② 實現BasicAuthenticationMiddleware: 要求對HttpContext應用BA Scheme。
// HTTP基本認證Middleware public static class BasicAuthentication { public static void UseBasicAuthentication(this IApplicationBuilder app) {app.UseMiddleware; } }public class BasicAuthenticationMiddleware{ private readonly RequestDelegate _next; private readonly ILogger _logger; public BasicAuthenticationMiddleware(RequestDelegate next, ILoggerFactory LoggerFactory) { _next = next; _logger = LoggerFactory.CreateLogger; } public async Task Invoke(HttpContext httpContext, IAuthenticationService authenticationService) { var authenticated = await authenticationService.AuthenticateAsync(httpContext, BasicAuthenticationScheme.DefaultScheme); _logger.LogInformation("Access Status:" + authenticated.Succeeded); if (!authenticated.Succeeded) { await authenticationService.ChallengeAsync(httpContext, BasicAuthenticationScheme.DefaultScheme, new AuthenticationProperties { }); return; } await _next(httpContext); }}

③ ASP.NET Core 添加BA Scheme , 為待認證資源路徑啟用BA中間件,注意這里使用UseWhen插入中間件。
services.AddAuthentication(BasicAuthenticationScheme.DefaultScheme) .AddScheme(BasicAuthenticationScheme.DefaultScheme,);app.UseWhen( predicate:x => x.Request.Path.StartsWithSegments(new PathString(_protectedResourceOption.Path)), configuration:appBuilder => { appBuilder.UseBasicAuthentication;} );

現可在瀏覽器測試:

ASP.NETCore編程實現基本認證

ASP.NETCore編程實現基本認證進一步思考?


That's All . BA認證是常見的基礎認證協議,文章期待以清晰的方式傳遞協議原理和編程實現,要的同學閱讀原文。

【免責聲明】本文僅代表作者或發布者個人觀點,不代表SEO研究協會網(www.heffgx.live)及其所屬公司官方發聲,對文章觀點有疑義請先聯系作者或發布者本人修改,若內容涉及侵權或違法信息,請先聯系發布者或作者刪除,若需我們協助請聯系平臺管理員,郵箱[email protected](本平臺不支持其他投訴反饋渠道,謝謝合作)。若需要學習以上相關知識請到巨推學院觀看視頻教程,網址www.jutuiedu.com。

雞蛋

鮮花

握手

雷人

路過
已有 0 人參與

會員評論

推薦閱讀

    2020-04-05 15:27
  • 作者:Derek

    嚴防境外輸入!英國留學生返京5天后發熱,第三次檢測呈陽性

    央視財經(記者 王聞聰)4月3日,在北京市新型冠狀病毒肺炎疫情防控工作新聞發布會上,市疾控中心副主任龐星火介紹了4月2日報告的境外輸入新冠肺炎病例情況。某男,在英國留學。3月11日至3月19日,該學生在英國居家

  • 2020-04-05 15:23
  • 作者:bixiaomo

    如何做好自媒體的運營工作?

    以號養號的方式我們都知道現在對于原創作品的保護非常嚴格,因此,在內容創作上的要求必然更高,你不可能費勁心思維護很多平臺賬號,只能采用“以號養號”的方式來引流,從而達到效益最大化。建立完善的推廣體系在開

  • 2020-04-05 14:28
  • 作者:林羽凡

    QQ輔助模塊_QNotified

    【軟件版本】v0.7.1-beta【軟件大小】285.7kb【支持系統】安卓 Android【是否需要root】不需要(有的可能需要反正我都沒有)【測試機型】榮耀20【功能介紹】1. 隱藏消息列表小程序入口2. 去除回復自動@3. 語音消息轉發

  • 2020-04-05 13:16
  • 作者:yang0719

    個人如何運營自媒體?

    現在是一個互聯網時代,可以說只要有網絡就能在網上發聲,既然是是互聯網時代那么必然會有人利用其獲取收益。目前的自媒體運營就是借助網絡的力量進行收益獲取,而且現在自媒體的門檻也不是很高,很多人都開始運營起

  • 2020-04-05 13:02
  • 作者:stefanielin1130

    國家糧食和物資儲備局:沒必要囤米搶面

    國家糧食和物資儲備局:個別國家限制出口,對國內面粉、大米等口糧供應基本沒有影響。過度恐慌、搶購糧油,大可不必。(央視財經記者 鄒曉敏 王驍馳)【免責聲明】本文僅代表作者或發布者個人觀點,不代表SEO研究協會

  • 2020-04-05 12:55
  • 作者:半夏微涼

    魯南制藥集團網絡培訓練“內功”

    □記者 紀偉 通訊員 杜永武 報道本報臨沂訊 4月1日,記者從魯南制藥集團獲悉,面對疫情防控期間企業難以開展聚集式培訓的難題,魯南制藥集團主動出擊,開好分類培訓“藥方”,全方位滿足企業戰略發展和轉型創新下的

  • 2020-04-05 11:14
  • 作者:mileseo

    央行副行長劉國強:絕不會讓市場出現錢荒

    視頻加載中...國務院聯防聯控機制今日上午舉行新聞發布會,中國人民銀行副行長劉國強表示,我們絕不會讓市場出現錢荒,當然,錢也不要溢出來。滿足市場需求合理充裕。(央視財經記者 鄒曉敏 王驍馳) 【免責聲明】本

  • 2020-04-05 10:39
  • 作者:陳倉河谷

    范縣公務員網絡培訓實現全覆蓋

    新冠肺炎疫情發生以來,線下集中培訓按下“暫停鍵”,范縣依托河南干部網絡培訓學院學習平臺積極開展網絡培訓,全縣公務員和參照公務員法管理人員逐人建立學習賬號,實現應學盡學、應訓盡訓,全覆蓋,無盲區。目前,

  • 2020-04-05 08:44
  • 作者:ridxgu

    財政部:預計約提前2.5個月完成既定專項債發行任務

    央視財經(記者 吳南馨)今天上午,國務院聯防聯控機制舉行新聞發布會,介紹了增加地方政府專項債規模和強化對中小微企業普惠性金融支持的有關情況。財政部副部長許宏才表示,增加地方政府專項債券提前下達限額,有

  • 2020-04-05 08:12
  • 作者:LuLu_88

    公安部:開展專項行動嚴厲打擊影視、網絡培訓領域侵權盜版犯罪

    4月2日,南都記者從公安部獲悉,近日,公安部推出公安機關依法打擊食藥環和知識產權領域犯罪保障疫情防控期間復工復產十項措施,依法嚴厲打擊制假售假等違法犯罪活動,全力保障復工復產,促進經濟恢復發展。十條措施

文章排行

TOP ARTICLES

返回頂部
幸运飞艇公式规律