新聞中心
這篇文章主要介紹“Asp.net Core中如何實現(xiàn)自定義身份認證功能”,在日常操作中,相信很多人在Asp.net Core中如何實現(xiàn)自定義身份認證功能問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Asp.net Core中如何實現(xiàn)自定義身份認證功能”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Asp.Net Core中雖然集成了許多常用的身份認證,但很多時候,我們還是需要實現(xiàn)自己的身份認證接口,本文這里就簡單的介紹下如何實現(xiàn)自定義身份認證接口。
首先寫一個簡單的接口。
[Authorize]
[HttpGet]
public object Foo()
{
return DateTime.Now.ToString();
}由于有Authorize標記,訪問函數(shù)體前會判斷用戶是否通過認證,由于這里沒有通過認證,會的得到一個500錯誤。

自定義認證處理類:
實現(xiàn)一個IAuthenticationHandler接口即可:
public class MyAuthHandler : IAuthenticationHandler
{
public const string SchemeName = "MyAuth";
AuthenticationScheme _scheme;
HttpContext _context;
///
/// 初始化認證
///
public Task InitializeAsync(AuthenticationScheme scheme, HttpContext context)
{
_scheme = scheme;
_context = context;
return Task.CompletedTask;
}
///
/// 認證處理
///
public Task AuthenticateAsync()
{
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ù)http上下文判斷用戶是否通過認證,這里我實現(xiàn)的比較簡單,判斷下querystring中的IsLogin是否為true,為true則通過驗證。如果通過認證,則生成一個ClaimsPrincipal對象,返回認證成功
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理解為"證件",駕照是一種證件,護照也是一種證件。理解記錄了用戶的基本信息。ClaimsIdentity的持有者就是ClaimsPrincipal,一個ClaimsPrincipal可以持有多個ClaimsIdentity,就比如一個人既持有駕照,又持有護照。
認證通過后,也可以通過HttpContext.User屬性獲取這個對象,從而獲取用戶名,角色等信息
注冊自定義認證處理類:
在startup.cs中進行如下配置:
開啟身份驗證中間件
app.UseAuthentication(); app.UseAuthorization();
配置選項
services.AddAuthentication(options =>
{
options.AddScheme(MyAuthHandler.SchemeName, "default scheme");
options.DefaultAuthenticateScheme = MyAuthHandler.SchemeName;
options.DefaultChallengeScheme = MyAuthHandler.SchemeName;
}); 測試:
上述功能完成后,再進行前面的測試,在url中帶上認證信息訪問:

可以看到這次能成功訪問接口,說明認證信息是生效了的。
到此,關(guān)于“Asp.net Core中如何實現(xiàn)自定義身份認證功能”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
當前題目:Asp.netCore中如何實現(xiàn)自定義身份認證功能-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://www.dlmjj.cn/article/gssjh.html


咨詢
建站咨詢
