学习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的身份认证方式,后续还会进一步学习各种数据结构及属性的用途。

参考文献:

1https://blog.csdn.net/sD7O95O/article/details/134724623

2https://www.cnblogs.com/itjeff/p/16427423.html

3https://blog.csdn.net/weixin_68436326/article/details/132930540

4https://www.cnblogs.com/vic-tory/p/18237065

5https://blog.csdn.net/qq_27337291/article/details/123418867

相关推荐
安当加密03019 天前
统一身份认证系统测评
身份认证·单点登录·统一身份认证系统测评·统一身份认证系统登录认证·统一身份认证系统登录认证方案
李纲明13 天前
WordPress 登录后跳回登录页或提示「Cookie 被阻止」:先核站点 URL 与 HTTPS 一致,再查安全插件与 CDN
https·登录·cdn·wordpress·cookie·devdiy·站点url
Thanks_ks13 天前
Cookie 和 Session 到底是什么关系——登录态是怎么维持的
分布式·http·jwt·cookie·session·后端开发·登录态
李纲明14 天前
WordPress 登录后跳回登录页或一直转圈:先核 Cookie、站点 URL 与 HTTPS,再查 CDN 与安全插件
登录·cdn·wordpress·cookie·devdiy·安全插件
流浪00115 天前
计算机网络篇13:应用层——HTTP 不记录用户状态,Cookie 在客户端存凭证、Session 在服务端存数据
计算机网络·cookie·session·http协议
FungLeo17 天前
成为全栈·Go 后端篇·跨语言认证兼容:Node 与 Go 如何互认 JWT 和密码
golang·go·jwt·身份认证·成为全栈·bcrypt
李纲明20 天前
WordPress 后台登录马上被踢回登录页:Cookie 域、HTTPS、盐值和页面缓存怎么查
运维·缓存·https·php·wordpress·cookie
j7~22 天前
【Linux网络加餐】《HTTP 会话保持:Cookie 与 Session 原理及实验验证》---详解
linux·网络·网络协议·http·cookie·session
承渊政道1 个月前
Linux网络学习【深入理解应用层HTTP协议、Cookie与Session机制及HTTPS协议原理】
linux·网络·学习·http·cookie·session
FungLeo1 个月前
成为全栈·Flutter App 篇·会员中心:资料、密码、通知与私有数据缓存
flutter·dart·身份认证·数据隔离·成为全栈·会员中心