AspNetCore中基于Session的身份验证

简介: 目录AspNetCore中基于Session的身份验证基于Session的身份验证实现Asp.Net Core中的Session身份认证实现源代码总结AspNetCore中基于Session的身份验证在Asp.Net框架中提供了几种身份验证方式:Windows身份验证、Forms身份验证、passport身份验证(单点登录验证)。

目录

AspNetCore中基于Session的身份验证

在Asp.Net框架中提供了几种身份验证方式:Windows身份验证Forms身份验证、passport身份验证(单点登录验证)。

每种验证方式都有适合它的场景:

  1. Windowss身份验证通常用于企业内部环境,Windows Active Directory就是基于windows平台的身份验证实现;
  2. Forms身份验证是Asp.Net框架中提出的另一种验证方式;
  3. passport身份验证是微软提供的基于自己的lives账号实现的单点认证服务。

基于Session的身份验证实现

​ 这种方式可能是在Asp.Net框架提供的几种验证方式之外的最常用的身份验证方式。

实现原理

  1. 客户端发送身份认证数据到服务器端
  2. 服务器收到并验证后将用户信息保存到Session对象中,然后生成对应的标识并将标识写入cookie中
  3. 当客户端下次请求时带上该cookie标识
  4. 服务器通过该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属性,该属性用来判断用户的登陆状态:

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);
        }
    }
}

我们已经实现了验证,现在缺少的是如何在session中添加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();
    }
}

OK!我们已经实现了身份认证。

源代码

总结

​ 我们描述了传统Asp.Net中提供的几种身份认证方式,并在Asp.Net Core实现了一种虽然不标准但是常用的身份认证机,看起了与Asp.Net中的用法并没有什么区别。

​ 在Asp.Net Core中这种用法似乎并不受欢迎,可能是因为Asp.Net Core提供了更高级的身份验证机制吧,那么这篇文章存在的意义呢?权当做是对Asp.Net的一种纪念吧!

​ 现在是.net core的时代,让.net洗洗睡吧!

目录
相关文章
|
存储 安全 算法
[ web基础篇 ] session,cookie,token 那些事儿 ?
session ?cookie ?token ? 相信大家对这几个词并不陌生,不管是面试还是工作都会有涉及的,可想而知它的重要性。 网上关于 session、cookie、token 的文章有很多,每篇文章都有一些独特的见解。 在写文章之前,我看了很多篇 session、cookie、token 的文章,感觉很多都没有讲的很清楚,泛泛而谈。 在看了这么多的文章之后,我对这几次词又有了不一样的理解,在这里和大家分享一下。
286 0
[ web基础篇 ] session,cookie,token 那些事儿 ?
|
12月前
|
存储 Java Spring
【web】理解 Cookie 和 Session 机制
【web】理解 Cookie 和 Session 机制
285 0
【Web】Cookie 和 Session
回顾 Cookie 理解会话机制 (Session) Cookie 和 Session 的区别 核心方法 代码示例: 实现用户登陆 1.实现一个登陆页面 2.实现一个Servlet用于处理登陆请求 3.再实现一个IndexServlet来表示重定向之后的主页 实现效果
【Web】Cookie 和 Session
|
存储 安全 编译器
|
开发框架 缓存 小程序
ASP.NET Core: 二十六. 应用JWT进行用户认证及Token的刷新(二)
本文将通过实际的例子来演示如何在ASP.NET Core中应用JWT进行用户认证以及Token的刷新方案.
261 0
ASP.NET Core: 二十六. 应用JWT进行用户认证及Token的刷新(二)
|
存储 JSON 开发框架
ASP.NET Core: 二十六. 应用JWT进行用户认证及Token的刷新(一)
本文将通过实际的例子来演示如何在ASP.NET Core中应用JWT进行用户认证以及Token的刷新方案.
300 0
ASP.NET Core: 二十六. 应用JWT进行用户认证及Token的刷新(一)
|
开发框架 .NET API
ASP.NET Core: 二十六. 应用JWT进行用户认证及Token的刷新(四)
本文将通过实际的例子来演示如何在ASP.NET Core中应用JWT进行用户认证以及Token的刷新方案.
235 0
|
开发框架 .NET
ASP.NET Core: 二十六. 应用JWT进行用户认证及Token的刷新(三)
本文将通过实际的例子来演示如何在ASP.NET Core中应用JWT进行用户认证以及Token的刷新方案.
166 0
|
存储 开发框架 安全
ASP.NET Core: 二十六. 应用JWT进行用户认证及Token的刷新(五)
本文将通过实际的例子来演示如何在ASP.NET Core中应用JWT进行用户认证以及Token的刷新方案.
528 0
ASP.NET Core: 二十六. 应用JWT进行用户认证及Token的刷新(五)
|
数据安全/隐私保护 开发者
ctfshow-WEB-web11( 利用session绕过登录验证)
ctf.show WEB模块第11关用session中保存的密码进行登录验证, 将 session中保存的密码清空即可绕过
584 0
ctfshow-WEB-web11( 利用session绕过登录验证)