.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 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 入门(二) (介绍得很直白,适合入门)
.Net身份验证概述的更多相关文章
- ASP.NET Forms身份验证概述
表单身份验证允许您使用自己的代码对用户进行身份验证,然后在cookie或页面URL中维护身份验证令牌.表单身份验证通过FormsAuthenticationModule类参与ASP.NET页面生命周期 ...
- [转]IIS的各种身份验证详细测试
本文转自:http://www.cnblogs.com/chnking/archive/2007/11/20/965553.html#_Toc183326163 一. IIS的身份验证概述 1. ...
- ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介
概述 之前写过一篇关于<ASP.NET Core 1.0 静态文件.路由.自定义中间件.身份验证简介>的文章,主要介绍了ASP.NET Core中StaticFile.Middleware ...
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
概述 ASP.NET Core 1.0是ASP.NET的一个重要的重新设计. 例如,在ASP.NET Core中,使用Middleware编写请求管道. ASP.NET Core中间件对HttpCon ...
- MVC5 网站开发实践 2.2、管理员身份验证
上次完成了管理员的登录,这次要解决对管理员登录后的验证,采用AuthorizeAttribute属性的方式.之前还要解决几个问题,然后才重写验证类,最后稍微改一下界面. 目录 MVC5 网站开发实践 ...
- (实用篇)php通过会话控制实现身份验证实例
会话控制的思想就是指能够在网站中根据一个会话跟踪用户.这里整理了详细的代码,有需要的小伙伴可以参考下. 概述 http 协议是无状态的,对于每个请求,服务端无法区分用户.PHP 会话控制就是给了用户一 ...
- 初识Identity并添加身份验证管理页面
目录 初识Identity并添加身份验证管理页面 前言 什么是ASP.NET Core Identity 创建带有身份验证的WebApp 尝试运行 检查解决方案中的项目文件 发现问题 原因 解决问题 ...
- 如何通过使用窗体身份验证和 Visual C#.NET 对 Active Directory 验证身份
本分步指南演示如何在 ASP.NET 应用程序如何使用窗体身份验证允许用户使用轻型目录访问协议 (LDAP),对 Active Directory 进行验证.经过身份验证的用户重定向之后,可以使用Ap ...
- NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介
NET Core 1.1 静态文件.路由.自定义中间件.身份验证简介 概述 之前写过一篇关于<ASP.NET Core 1.0 静态文件.路由.自定义中间件.身份验证简介>的文章,主要 ...
随机推荐
- NOIP2010普及组 三国游戏 -SilverN
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> usin ...
- NOIP2012普及组 (四年后的)解题报告 -SilverN
本章施工仍未完成 现在的时间是3.17 0:28,我困得要死 本来今天(昨天?)晚上的计划是把整个四道题的题解写出来,但是到现在还没写完T4的高效算法,简直悲伤. 尝试了用floyd写T4,终于大功告 ...
- 《TCP/IP详解 卷一》读书笔记-----动态路由协议
1.以下条件只要有一个不满足,则需要使用动态路由协议:1)网络规模小,2)只有一个连接点用于连接其他网络,3)没有冗余的路由器(一般用作备份) 2.所谓动态路由就是各个路由器与自己相邻的路由器交换各自 ...
- hdu-4810 Wall Painting(组合数学)
题目链接: Wall Painting Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- UESTC 917 方老师的分身IV --求欧拉路径
判断欧拉路径是否存在及求出字典序最小的欧拉路径问题(如果存在). 将字符串的第一个字母和最后一个字母间连边,将字母看成点,最多可能有26个点(a-z),如果有欧拉路径,还要判断是否有欧拉回路,如果有, ...
- 2014 Super Training #7 E Calculate the Function --矩阵+线段树
原题:ZOJ 3772 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3772 这题算是长见识了,还从没坐过矩阵+线段树的题 ...
- npm install时报错 npm ERR!Windows_NT 6.1.7601
解决办法:先设置代理为空 npm config set proxy null, 然后再npm install cnpm -g --registry=https://registry.npm.taoba ...
- 第11章 Windows线程池(2)_Win2008及以上的新线程池
11.2 Win2008以上的新线程池 (1)传统线程池的优缺点: ①传统Windows线程池调用简单,使用方便(有时只需调用一个API即可) ②这种简单也带来负面问题,如接口过于简单,无法更多去控制 ...
- AC日记——逃出克隆岛 (bfs)
2059 逃出克隆岛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description oi小组的yh酷爱玩魔兽rpg,每天都 ...
- 浏览器默认样式(User Agent Stylesheet)
原文:http://www.zjgsq.com/898.html 不同浏览器对于相同元素的默认样式并不一致,这也是为什么我们在CSS的最开始要写 * {padding:0;marging:0}: 不过 ...