ASP.NET Core Authentication系列(二)實現認證、登入和登出
阿新 • • 發佈:2020-11-02
前言
===
在[上一篇文章](https://www.cnblogs.com/liang24/p/13910368.html)介紹ASP\.NET Core Authentication的三個重要概念,分別是Claim, ClaimsIdentity, ClaimsPrincipal,以及claims-base authentication是怎麼工作的。
這篇文章來介紹一下如何基於claims-base authentication來實現認證、登入和登出功能的。原始碼從[這裡](https://yxl-article.oss-cn-shenzhen.aliyuncs.com/files/CookieAuthenticationDemo.zip)下載。
認證票據
===
認證是一個確定傳送請求的訪問者身份的過程,與認證相關的還有另外兩個基本操作:登入和登出。
ASP\.NET Core應用的認證實現在一個名為`AuthenticationMiddleware`的中介軟體中,該中介軟體在處理分發給它的請求時會按照指定的 **認證方案(Authentication Scheme)** 從請求中提取能夠驗證使用者真實身份的資料,我們一般將該資料稱為 **安全令牌(Security Token)** 。ASP\.NET Core應用下的安全令牌被稱為 **認證票據(Authentication Ticket)** ,所以ASP\.NET Core應用採用基於票據的認證方式。
`AuthenticationMiddleware`中介軟體的整個認證過程涉及下圖的三種操作:認證票據的頒發、檢驗和撤銷。
![image](https://img2020.cnblogs.com/blog/19327/202003/19327-20200325083708342-258956203.png)
ASP\.NET Core應用的認證系統旨在構建一個標準的模型來完成針對請求的認證以及與之相關的登入和登出操作。接下來我們就通過一個簡單的例項來演示如何在一個ASP\.NET Core應用中實現認證、登入和登出的功能。
基於Cookie的認證
===
大多數Web應用採用的是Cookie來儲存認證票據,因此我們採用基於Cookie的認證方案。
配置
---
在`Startup.ConfigureServices`方法裡,新增`AuthenticationMiddleware`中介軟體:
```
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
```
然後在`Startup.Configure`方法裡,呼叫`UseAuthentication`和`UseAuthorization`來設定`HttpContext.User`屬性以及允許請求經過`AuthenticationMiddleware`,並且要在`UseEndpoints`之前呼叫:
```
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
// ...
}
```
登入
---
接下來實現登入方法,常見是使用“使用者名稱+密碼”,這裡使用一個靜態字典來模擬使用者表。
```
public class AccountController : Controller
{
// ....
private static Di