zoukankan      html  css  js  c++  java
  • .Net身份验证概述

    一直以来,所有的系统基本都会有用户的登陆验证过程,整个过程其实也不难理解,就是对于cookie的解析。微软的.Net平台围绕用户身份验证授权也有好几个版本了,从早期的Membership到Identity。微软的想法是尽量把这些基础的功能封装,让我们调用起来越来越方便,但由于可拓展性,复杂度和相关资料也并不多,源码研究起来也比较费劲。说来惭愧,之前的项目一直没有用的这块内容。这次有机会从新做授权登陆相关,所以好好整理了一下,方便以后查阅。

     

    为什么不用Session?

    由于Http协议的无状态性,所以一般的用户登陆验证信息都是放在浏览器的cookie中。当然,有人使用session来保存用户信息也未尝不可,但笔者认为用session会增加服务器资源。虽然你可能会说这点内容基本不会占用太多内存,但是在互联网大用户的背景下,多台服务器做负载,即便使用缓存服务器如Redis,也还是会增加负担。那么为什么不来用cookie存储呢?事实上,众多互联网企业也确实是在使用cookie的。

     

    一、核心思想(Forms 认证)

    这的土办法也是我们之前做登陆验证用的,也是.Net的核心思想。

    首先,我们会在IHttpModule处理管道中增加一个认证模块,也就是FormsAuthenticationModule,在这个模块中会查找登陆cookie,没有的话就说明没有登陆,有的话就解析这个cookie获得里面用户信息,给HttpContext.User的IPrincipal这个对象赋值。

    那么,通常我们会在需要登陆验证的方法或者控制器上使用AuthorizeAttribute标签,它内部会判断HttpContext.User的IPrincipal是不是为空,为空就是没有登陆。那么这个对象在哪里来呢?

    在ASP.NET中实现登录与注销的方法:
    1. 登录:调用FormsAuthentication.SetAuthCookie()方法,传递一个登录名即可。
    2. 注销:调用FormsAuthentication.SignOut()方法。

    这里,如果要修改登陆cookie的信息,如过期时间,增加字段等,需要重写IPrincipal方法,去实现在SignIn写cookie的方法和在Application_AuthenticateRequest时解析cookie设置HttpContext.User对象。

    还要一个UrlAuthorizationModule,就是检查用户角色有没有权限访问某个Url路径的。因为这个在WebForm中比较有用,在Mvc和以后的发展中就基本没什么用了,所以不多说。

    有兴趣的话,可以看 细说ASP.NET Forms身份认证 里面讲的非常详细。

     

    二、Mvc5 Owin + Identity(Claims-based 认证) -- Indentity 2.0

    代总是会发展,微软总是想帮我们做更多的事情。为了弥补Membership的不足和推广Open Web Interface for .Net(Owin)解耦服务器和应用,并与oauth接口第三方平台登陆,推出了Identity + Owin的组合。虽然也有Microsoft.AspNetCore.Identity.EntityFrameworkCore,用来实现ef的库创建,但其最核心的类库还是 Microsoft.AspNet.Identity.Core。

    Claims-based简单的说就是将登陆与认证和授权分开,将认证与授权做成单独服务,登陆只要指向这个服务,并拿到返回的令牌(包括用户信息,用户名,角色等)。

    盗一个图来解释与qq集成的登陆场景:

    微软大神真的是不知道累啊。。。前前后Identity和owin有好多个版本更新,每次的会封装一些新的类,新的使用方法,看似用起来容易了,可是东西太多,太杂,太乱了,学习资料也是随着版本的不同,前后有出入。。。累啊。。。所以这里,我不基于它封装好的类来写,而是基于它核心的几个类,这样更容易理解内容的机制。

    Identity中:

    UserManager:用来创建用户和查询用户,包括

    觉得不好的话,有几篇精彩的博文可以参考: 

    MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN (重点原理) 

    Microsoft.AspNet.Identity 的简单使用

    ASP.NET Identity 2集成到MVC5项目--笔记01 (很适合上手)

    跌倒了,再爬起来:ASP.NET 5 Identity (基本没用,好像不是在说同一个东西,估计他研究的Asp.Net 5却有不同吧,反正Asp.Net5现在也基本废了)

     

    三、.Net Core Identity -- Indentity 3.0

    ASP.NET Core 之 Identity 入门(一)|ASP.NET Core 之 Identity 入门(二) (介绍得很直白,适合入门)

  • 相关阅读:
    20200209 ZooKeeper 3. Zookeeper内部原理
    20200209 ZooKeeper 2. Zookeeper本地模式安装
    20200209 Zookeeper 1. Zookeeper入门
    20200206 尚硅谷Docker【归档】
    20200206 Docker 8. 本地镜像发布到阿里云
    20200206 Docker 7. Docker常用安装
    20200206 Docker 6. DockerFile解析
    20200206 Docker 5. Docker容器数据卷
    20200206 Docker 4. Docker 镜像
    Combining STDP and Reward-Modulated STDP in Deep Convolutional Spiking Neural Networks for Digit Recognition
  • 原文地址:https://www.cnblogs.com/Hai--D/p/6074347.html
Copyright © 2011-2022 走看看