AspNetCore中基于Session的身份验证
2021-02-15 02:17
标签:nbu contain key title 项目 on() direct cookie ica
在Asp.Net框架中提供了几种身份验证方式:Windows身份验证、Forms身份验证、passport身份验证(单点登录验证)。 每种验证方式都有适合它的场景: ? 这种方式可能是在Asp.Net框架提供的几种验证方式之外的最常用的身份验证方式。 实现原理 ? 基于Session的身份认证并不是Asp.Net Core中推荐的认证方式,因为Asp.Net Core中有更高级的Forms身份认证方式,不过在这里不是本文章的主题,我们只讲如何在Asp.Net Core中实现基于Session的身份认证。 我们先创建一个用于代码演示的基础项目 在 创建一个 我们已经实现了验证,现在缺少的是如何在session中添加 给现有的页面添加验证功能,打开 OK!我们已经实现了身份认证。 ? 我们描述了传统Asp.Net中提供的几种身份认证方式,并在Asp.Net Core实现了一种虽然不标准但是常用的身份认证机,看起了与Asp.Net中的用法并没有什么区别。 ? 在Asp.Net Core中这种用法似乎并不受欢迎,可能是因为Asp.Net Core提供了更高级的身份验证机制吧,那么这篇文章存在的意义呢?权当做是对Asp.Net的一种纪念吧! ? 现在是.net core的时代,让.net洗洗睡吧! AspNetCore中基于Session的身份验证 标签:nbu contain key title 项目 on() direct cookie ica 原文地址:https://www.cnblogs.com/lonelyxmas/p/12988988.htmlAspNetCore中基于Session的身份验证
Windowss身份验证
通常用于企业内部环境,Windows Active Directory
就是基于windows平台的身份验证实现;Forms身份验证
是Asp.Net框架中提出的另一种验证方式;passport身份验证
是微软提供的基于自己的lives账号实现的单点认证服务。基于Session的身份验证实现
Asp.Net Core中的Session身份认证实现
dotnet new razor -n SessionSample
startup.cs
中启用session功能public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
...
//添加session服务
services.AddSession();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
//启用session
app.UseSession();
app.UseMvc();
}
}
MyPage.cs
文件,我们在该类中实现了一个IsLogin
属性,该属性用来判断用户的登陆状态:public class MyPage:PageModel
{
protected bool IsLogin
{
get
{
string userId = null;
//从sessin中获取UserId对应的用户信息来判断用户是否登陆
if (HttpContext.Session.TryGetValue("UserId", out byte[] bytes))
{
userId = Encoding.UTF8.GetString(bytes);
}
return !string.IsNullOrWhiteSpace(userId);
}
}
}
UserId
的信息,我们来创建一个Login页面
:dotnet new page -n Login
public class LoginModel : MyPage
{
public void OnGet()
{
if(IsLogin)
{
//如果已经登陆就跳转到/Index页面
RedirectToPage("/Index");
}
}
public IActionResult OnPost()
{
//这里我们将UserId写入session中
HttpContext.Session.SetString("UserId", Guid.NewGuid().ToString());
return RedirectToPage("/Index");
}
}
Index页面
,添加如下代码:public class IndexModel : MyPage
{
public IActionResult OnGet()
{
if (!IsLogin)
{
return RedirectToPage("/Login");
}
return Page();
}
}
源代码
总结