学习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

相关推荐
gywl6 天前
Spring Web MVC入门
spring·json·mvc·注解·cookie·session
lixww.cn10 天前
ASP.NET Core用MediatR实现领域事件
ddd·asp.net core·mediatr
lixww.cn13 天前
ASP.NET Core SignalR向部分客户端发消息
javascript·websocket·vue·asp.net core·signalr
lixww.cn13 天前
ASP.NET Core SignalR的协议协商
asp.net core·signalr
lixww.cn14 天前
ASP.NET Core SignalR的分布式部署
redis·消息队列·asp.net core·signalr
lixww.cn14 天前
ASP.NET Core对JWT的封装
asp.net core·jwt·authorize
lixww.cn15 天前
ASP.NET Core JWT Version
asp.net core·jwt·filter·identity
lixww.cn16 天前
ASP.NET Core JWT
asp.net core·jwt
安 当 加 密16 天前
安当SLA操作系统登录双因素认证:全方位保障Windows系统登录安全
安全·数据安全·身份认证·双因素认证·操作系统登录双因素认证·ukey·otp动态口令
lixww.cn16 天前
ASP.NET Core标识框架Identity
asp.net core·rbac·identity