当前位置: 移动技术网 > IT编程>开发语言>.net > Asp.Net Core中基于Session的身份验证的实现

Asp.Net Core中基于Session的身份验证的实现

2018年09月21日  | 移动技术网IT编程  | 我要评论

威客网站哪个好,修真的巨龙txt,张柏芝 赵本山

在asp.net框架中提供了几种身份验证方式:windows身份验证、forms身份验证、passport身份验证(单点登录验证)。

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

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

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

源代码

总结

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

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

现在是.net core的时代,让.net洗洗睡吧!以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网