怎么在Asp.Net Core中利用Session实现身份验证

发布时间:2021-05-27 16:56:27 作者:Leah
来源:亿速云 阅读:292

怎么在Asp.Net Core中利用Session实现身份验证?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

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

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

Asp.net Core验证码登录遇到两个小问题

第一是在Asp.net Core中引用dll,以往我们引用DLL都是直接引用,在Core里这样是不行的,必须基于NuGet添加,或者基于project.json添加,然后保存VS会启动还原类库。

第二就是使用Session的问题,Core里使用Session需要添加Session类库。

第一步:在你的项目上基于NuGet添加:

install-package Microsoft.AspNetCore.Session -ver 2.0

install-package Microsoft.AspNetCore.Http.Extensions -ver 2.0

第二步:修改startup.cs

在startup.cs找到方法ConfigureServices(IServiceCollection services) 注入Session(这个地方是Asp.net Core pipeline):

services.AddSession();

接下来我们要告诉Asp.net Core使用内存存储Session数据,在Configure(IApplicationBuilder app,...)方法中添加代码:

app.UseSession();

基于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();
  }
}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

推荐阅读:
  1. ASP.NET Core WebApi基于JWT实现接口授权验证
  2. ASP.NET Core学习之使用JWT认证授权的方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

asp.net session

上一篇:怎么在ASP.NET Core 3.x 中实现并发限制

下一篇:使用ASP.NET Core怎么实现跨站登录重定向

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》