一直以来,所有的系统基本都会有用户的登陆验证过程,整个过程其实也不难理解,就是对于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 Identity学习笔记+MVC5默认项目解析_基础用法
  • Asp.Net Identity学习笔记+MVC5默认项目解析_授权&Claim
  • Asp.Net Identity学习笔记+MVC5默认项目解析_第三方登入&授权总结

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

三、.Net Core Identity -- Indentity 3.0

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

转载于:https://www.cnblogs.com/Hai--D/p/6074347.html

.Net身份验证概述相关推荐

  1. SharePoint Oauth和服务器到服务器(S2S)身份验证概述

    之前介绍过ADFS 单点登录,这次介绍Oauth的单点登录.有时候坚持OCS 是Oauth 和 S2S的简称. SharePoint Oauth和服务器到服务器(S2S)身份验证概述(Oauth an ...

  2. kerberos验证_SQL Server中的服务主体名称和Kerberos身份验证概述

    kerberos验证 This article gives an overview of Service Principal Name (SPN) for using the Kerberos aut ...

  3. WSFederation 身份验证模块概述

    Windows Identity Foundation (WIF) 包括通过 WS-联合身份验证模块 (WS-FAM) 对 ASP.NET 应用程序中联合身份验证的支持. 本主题有助于理解联合身份验证 ...

  4. Asp.net 身份验证、授权概述

    [本周]如约而至;时间是争取来的,这回的[本周]是把若干零碎的时间利用起来成文的,完成对Asp.net身份验证.访问授权等内容的梳理,可能漏掉的东西会比较多,漏掉的还是希望大家来补充.顺便说一下上次[ ...

  5. HttpMoudle实现用户身份验证

      查看文章   HttpMoudle实现用户身份验证 2009-12-04 19:37 参考自小白.net的HttpMoudle实现用户身份验证 下表列出了在 IIS 7.0 集成模式下运行的 AS ...

  6. 火狐和chrome_Firefox,Chrome和Edge都将支持WebAuthn的硬件两因素身份验证

    火狐和chrome Logging into Gmail or Facebook could soon mean plugging in a USB device, potentially makin ...

  7. soapui 测试soap_使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第二部分

    soapui 测试soap 在本系列的第一篇文章中,我们创建了一个基本的身份验证服务,以使用SoapUI进行调用. 因此,在第二篇文章中,我们将逐步演示如何使用此工具成功调用这种服务. 使用SoapU ...

  8. 使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第二部分

    在本系列的第一篇文章中,我们创建了一个基本的身份验证服务,以使用SoapUI进行调用. 因此,在第二篇文章中,我们将逐步演示如何使用此工具成功调用这种服务. 使用SoapUI的1-Basic WCF ...

  9. app engine_App Engine中的Google Services身份验证,第2部分

    app engine 在本教程的第一部分中, 我介绍了如何使用OAuth进行Google API服务的访问/身份验证. 不幸的是,正如我稍后发现的那样,我使用的方法是OAuth 1.0,显然现在Goo ...

  10. 使用Spring Security对RESTful服务进行身份验证

    1.概述 本文重点介绍如何针对提供安全服务的安全REST API进行身份验证 -主要是RESTful用户帐户和身份验证服务. 2.目标 首先,让我们看一下参与者-典型的启用了Spring Securi ...

最新文章

  1. android文件的读取方法,Android读取写入文件的方法
  2. SAP PP COR1事务里下达工单,保存时报错:No data was found for the input values
  3. python应该怎么自学-Python 应该怎么学?
  4. 基于词典的逆向最大匹配中文分词算法,更好实现中英文数字混合分词
  5. .NET : 动态生成工作流定义文件并且进行编译
  6. MATLAB实战系列(四)- LabVIEW初探
  7. php设置错误,错误记录
  8. LiveVideoStack Meet | 北京:卷时代,多媒体人 生存指北
  9. 报名 | 腾讯组织的区块链技术沙龙,本周六在深圳!
  10. Linux学习笔记——例说makefile 增加宏定义
  11. zookeeper启动失败
  12. 【网易云信】即时通讯SDK DEMO
  13. 正则表达式验证手机号,正则表达式验证邮箱号,正则表达式验证QQ号,正则表达式验证微信号等
  14. 计算机我的云盘在哪里看,怎么设置在我的电脑中显示百度网盘
  15. 如何用计算机模拟光的传播,菲涅尔计算全息干涉图的制作与模拟再现.doc
  16. Matlab抓取网页数据
  17. 联想笔记本fn键linux,ThinkPad如何修改fn键默认操作
  18. error:unable to access jarfile cracker2017.jar解决方法
  19. 一种最低级的按键状态机
  20. 四川一度智信:电商平台商品关键词优化技巧

热门文章

  1. 难以回答的问题:注册监听器有什么用?
  2. 原因及解决办法:Failed to load module “canberra-gtk-module“
  3. GstElement的sink/src有什么区别?
  4. linux中posix共享内存,Linux 共享内存(POSIX)
  5. oracle ebs采购申请接口表,Oracle EBS BOM接口表操作.doc
  6. win7如何设置wifi热点_win7电脑本地连接连不上怎么办?详细教您如何设置本地连接...
  7. 1. COM编程——什么是组件
  8. Linux下文件查找命令
  9. iPhone 无线投影到 Mac
  10. 区块链教程Fabric1.0源代码分析流言算法Gossip服务端一兄弟连区块链教程