這篇文章主要介紹“Asp.net Core中如何實現(xiàn)自定義身份認(rèn)證功能”,在日常操作中,相信很多人在Asp.net Core中如何實現(xiàn)自定義身份認(rèn)證功能問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Asp.net Core中如何實現(xiàn)自定義身份認(rèn)證功能”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
在網(wǎng)站設(shè)計制作、做網(wǎng)站過程中,需要針對客戶的行業(yè)特點、產(chǎn)品特性、目標(biāo)受眾和市場情況進(jìn)行定位分析,以確定網(wǎng)站的風(fēng)格、色彩、版式、交互等方面的設(shè)計方向。創(chuàng)新互聯(lián)還需要根據(jù)客戶的需求進(jìn)行功能模塊的開發(fā)和設(shè)計,包括內(nèi)容管理、前臺展示、用戶權(quán)限管理、數(shù)據(jù)統(tǒng)計和安全保護(hù)等功能。Asp.Net Core中雖然集成了許多常用的身份認(rèn)證,但很多時候,我們還是需要實現(xiàn)自己的身份認(rèn)證接口,本文這里就簡單的介紹下如何實現(xiàn)自定義身份認(rèn)證接口。
首先寫一個簡單的接口。
[Authorize] [HttpGet] public object Foo() { return DateTime.Now.ToString(); }
由于有Authorize標(biāo)記,訪問函數(shù)體前會判斷用戶是否通過認(rèn)證,由于這里沒有通過認(rèn)證,會的得到一個500錯誤。
自定義認(rèn)證處理類:
實現(xiàn)一個IAuthenticationHandler接口即可:
public class MyAuthHandler : IAuthenticationHandler { public const string SchemeName = "MyAuth"; AuthenticationScheme _scheme; HttpContext _context; ////// 初始化認(rèn)證 /// public Task InitializeAsync(AuthenticationScheme scheme, HttpContext context) { _scheme = scheme; _context = context; return Task.CompletedTask; } ////// 認(rèn)證處理 /// public TaskAuthenticateAsync() { var req = _context.Request.Query; var isLogin = req["isLogin"].FirstOrDefault(); if (isLogin != "true") { return Task.FromResult(AuthenticateResult.Fail("未登陸")); } var ticket = GetAuthTicket("test", "test"); return Task.FromResult(AuthenticateResult.Success(ticket)); } AuthenticationTicket GetAuthTicket(string name, string role) { var claimsIdentity = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, name), new Claim(ClaimTypes.Role, role), }, "My_Auth"); var principal = new ClaimsPrincipal(claimsIdentity); return new AuthenticationTicket(principal, _scheme.Name); } /// /// 權(quán)限不足時的處理 /// public Task ForbidAsync(AuthenticationProperties properties) { _context.Response.StatusCode = (int)HttpStatusCode.Forbidden; return Task.CompletedTask; } ////// 未登錄時的處理 /// public Task ChallengeAsync(AuthenticationProperties properties) { _context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; return Task.CompletedTask; } }
主體函數(shù)是AuthenticateAsync,主要進(jìn)行了如下幾步
首先是根據(jù)http上下文判斷用戶是否通過認(rèn)證,這里我實現(xiàn)的比較簡單,判斷下querystring中的IsLogin是否為true,為true則通過驗證。如果通過認(rèn)證,則生成一個ClaimsPrincipal對象,返回認(rèn)證成功
ClaimsPrincipal對象它是.net core的驗證模型。ASP.NET Core 的驗證模型是claims-based authentication,網(wǎng)上有一些文章來介紹他Introduction to Authentication with ASP.NET Core。他們代表的意義如下:
Claim是用戶信息,例如用戶名,角色,郵件。一般常用的是用戶名和角色。特別是角色,經(jīng)常接用于授權(quán)信息中。一組claims構(gòu)成了一個identity,構(gòu)成了ClaimsIdentity對象,可以把ClaimsIdentity理解為"證件",駕照是一種證件,護(hù)照也是一種證件。理解記錄了用戶的基本信息。ClaimsIdentity的持有者就是ClaimsPrincipal,一個ClaimsPrincipal可以持有多個ClaimsIdentity,就比如一個人既持有駕照,又持有護(hù)照。
認(rèn)證通過后,也可以通過HttpContext.User屬性獲取這個對象,從而獲取用戶名,角色等信息
注冊自定義認(rèn)證處理類:
在startup.cs中進(jìn)行如下配置:
開啟身份驗證中間件
app.UseAuthentication(); app.UseAuthorization();
配置選項
services.AddAuthentication(options => { options.AddScheme(MyAuthHandler.SchemeName, "default scheme"); options.DefaultAuthenticateScheme = MyAuthHandler.SchemeName; options.DefaultChallengeScheme = MyAuthHandler.SchemeName; });
測試:
上述功能完成后,再進(jìn)行前面的測試,在url中帶上認(rèn)證信息訪問:
可以看到這次能成功訪問接口,說明認(rèn)證信息是生效了的。
到此,關(guān)于“Asp.net Core中如何實現(xiàn)自定義身份認(rèn)證功能”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)站名稱:Asp.netCore中如何實現(xiàn)自定義身份認(rèn)證功能-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://weahome.cn/article/gssjh.html