学习ASP.NET Core的身份认证(基于Cookie的身份认证1)

B/S架构程序可通过Cookie、Session、JWT、证书等多种方式认证用户身份,虽然之前测试过用户登录代码,也学习过开源项目中的登录认证,但其实还是对身份认证疑惑甚多,就比如登录验证后用户信息如何保存、客户端下次连接时如何获取用户信息等,这与使用Winform的身份认证方式差别还是挺大的。
  学习了挺久的ASP.NET Core及layui,最终还是想写个完整的程序,身份认证是程序的基本功能,无论如何都省略不掉的。准备学习并测试常用的身份认证方式,既熟悉相关概念,也为后续评估选择身份认证方式提供支撑。
  先学习相对简单的基于Cookie的身份认证方式,本文对照参考文献1-4实现最简单的登录、跳转主页面、登录功能(从其中抄了不少代码),概念什么的后续文章中再边学习边记录。
  VS2022创建基于MVC的Web项目,在Program.cs文件中增加以下代码:

csharp 复制代码
...
...
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(options =>
            {
                options.LoginPath = "/Account/Login";
                options.Cookie.Name = "CookiesLoginText";
                options.ExpireTimeSpan = TimeSpan.FromMinutes(10);
                options.SlidingExpiration = true;
            });
var app = builder.Build();
...
...
app.UseRouting();

app.UseAuthentication();//增加的代码
app.UseAuthorization();//增加的代码

app.MapControllerRoute

将项目自带的HomeController.cs文件的Index页面作为程序主页面,修改页面内容显示登录用户名及登出链接,并给与HomeController类Authorize特性,这样直接访问Index页面会因没有通过身份认证而跳转到登录页面。新增AccountController类定义登录、登出函数,并在登录函数中用户身份验证通过后调用HttpContext.SignInAsync将信息保存到Cookie中(代码主要参考自参考文献1,仅微调或简化),控制器类中可调用User属性获取当前用户信息。

csharp 复制代码
public async Task<IActionResult> Login(string name, string password)
{
    if (name=="gc_2299" && password=="123456")
	{
	    var claimIdentity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);
	    claimIdentity.AddClaim(new Claim(ClaimTypes.Name, name));
	
	    await base.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimIdentity));
	
	    return RedirectToAction("Index", "Home");
	}
	else
	{
	    return View();
	}
}

public async Task<IActionResult> Logout()
{
    await base.HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
    return RedirectToAction("Login", "Account");
}

最后是程序运行效果,启动程序后显示登录页面。
  

  用户登录成功后跳转到主页面,并在主页面中显示当前用户登录名,同时在浏览器的Cookie中可以看到当前用户的Cookie数据。


  点击退出登录按钮,返回登录页面,此时客户端浏览器中的Cookie也被清空。

  本文主要以及其简单的方式学习并验证了基于Cookie的身份认证方式,后续还会进一步学习各种数据结构及属性的用途。

参考文献:

1\]https://blog.csdn.net/sD7O95O/article/details/134724623 \[2\]https://www.cnblogs.com/itjeff/p/16427423.html \[3\]https://blog.csdn.net/weixin_68436326/article/details/132930540 \[4\]https://www.cnblogs.com/vic-tory/p/18237065 \[5\]https://blog.csdn.net/qq_27337291/article/details/123418867

相关推荐
小李是个程序3 天前
登录与登录校验:Web安全核心解析
java·spring·web安全·jwt·cookie
学习网安的doro13 天前
3a服务器的基本功能1之身份认证
服务器·网络·学习·安全·身份认证·ac
看天走路吃雪糕18 天前
sqli-labs:Less-21关卡详细解析
sql注入·cookie·sqli-labs·报错盲注·less-21
看天走路吃雪糕18 天前
sqli-labs:Less-20关卡详细解析
sql注入·cookie·sqli-labs·报错盲注·less-20
ArabySide20 天前
【ASP.NET Core】探讨注入EF Core的DbContext在HTTP请求中的生命周期
后端·http·asp.net·asp.net core·efcore
ChaITSimpleLove22 天前
.NET9 使用 OData 协议项目实战
restful·asp.net core·webapi·仓储模式·开放数据协议·分层隔离·.net odata
饭勺oO1 个月前
从WebApi迁移到Minimal API?有了这个神器,小白也能10分钟搞定!
asp.net core·minimalapi
头发那是一根不剩了2 个月前
双因子认证(2FA)是什么?从零设计一个安全的双因子登录接口
网络安全·系统设计·身份认证
艾希逐月2 个月前
系统安全之身份认证
系统安全·身份认证
一只会铲史的猫2 个月前
基于谷歌内核(Chromium)浏览器Cookie值的读取工具
cookie