目录
基于 Session 的身份验证实现
Asp.Net Core 中的 Session 身份认证实现
源代码
总结
在 Asp.Net 框架中提供了几种身份验证方式: Windows 身份验证, Forms 身份验证, passport 身份验证 (单点登录验证).
每种验证方式都有适合它的场景:
Windowss 身份验证
通常用于企业内部环境,
Windows Active Directory
就是基于 windows 平台的身份验证实现;
Forms 身份验证是 Asp.Net 框架中提出的另一种验证方式;
passport 身份验证
是微软提供的基于自己的 lives 账号实现的单点认证服务.
基于 Session 的身份验证实现
这种方式可能是在 Asp.Net 框架提供的几种验证方式之外的最常用的身份验证方式.
实现原理
客户端发送身份认证数据到服务器端
服务器收到并验证后将用户信息保存到 Session 对象中, 然后生成对应的标识并将标识写入 cookie 中
当客户端下次请求时带上该 cookie 标识
服务器通过该 cookie 标识从 session 对象中获取对应的用户信息
Asp.Net Core 中的 Session 身份认证实现
基于 Session 的身份认证并不是 Asp.Net Core 中推荐的认证方式, 因为 Asp.Net Core 中有更高级的 Forms 身份认证方式, 不过在这里不是本文章的主题, 我们只讲如何在 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 属性, 该属性用来判断用户的登 6 状态:
- public class MyPage:PageModel
- {
- protected bool IsLogin
- {
- get
- {
- string userId = null;
- // 从 sessin 中获取 UserId 对应的用户信息来判断用户是否登 6
- if (HttpContext.Session.TryGetValue("UserId", out byte[] bytes))
- {
- userId = Encoding.UTF8.GetString(bytes);
- }
- return !string.IsNullOrWhiteSpace(userId);
- }
- }
- }
我们已经实现了验证, 现在缺少的是如何在 session 中添加 UserId 的信息, 我们来创建一个 Login 页面:
- dotnet new page -n Login
- public class LoginModel : MyPage
- {
- public void OnGet()
- {
- if(IsLogin)
- {
- // 如果已经登 6 就跳转到 / 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();
- }
- }
OK! 我们已经实现了身份认证.
源代码
总结
我们描述了传统 Asp.Net 中提供的几种身份认证方式, 并在 Asp.Net Core 实现了一种虽然不标准但是常用的身份认证机, 看起了与 Asp.Net 中的用法并没有什么区别.
在 Asp.Net Core 中这种用法似乎并不受欢迎, 可能是因为 Asp.Net Core 提供了更高级的身份验证机制吧, 那么这篇文章存在的意义呢? 权当做是对 Asp.Net 的一种纪念吧!
现在是. net core 的时代, 让. net 洗洗睡吧!
来源: https://www.cnblogs.com/guodf/p/9657348.html