在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp.net Identity. 每一次改变,都使得验证框架更加的适应变化和可定制。这篇文章是Asp.net Identity系列的开篇,主要就membership的历史以及Asp.net Identity中的中的一些新的特性和设计思想分享一下自己的理解。后续将会对Asp.net Identity的实际使用以及实现方式等进行进一步展开。

一, Asp.net membership

Asp.net membership是在2005年的Asp.net 2.0引入的。微软首次为Web Form提供了一套membership解决方案,包含了表的结构,基础的操作User, Role等的类,甚至还有一套控件(用户登录login, 用户注册createuserwizard等这些控件)和一套现成的管理页面用来配置。(如下图)

微软一直的优势,就是非常的傻瓜化,什么都是现成的,直接拿来就用,但是也带来了一个负面的影响,就是适应性差,缺乏弹性,无法应对实际应用中的差别需求, 这主要体现在:

  • 1. 无法改变表结构,Asp.net membership为你定义好了User,Role等表,但是实际的开发中,你的User表可能需要更多的字段,这个时候往往只能在创建一个存储User附属信息的表。

  • 2. 提供的控件看似方便,但是其实鸡肋。由于自带的login控件和membership类,只提供了简单的用户信息录入,不能满足我们项目的需要。例如:我们要用户注册的时候同时输入QQ号码,电话号码,家庭地址。那么使用默认的方式是没有办法解决的。

  • 3. 默认只能是存储在Full Sql Server中,对于SQL Server CE, SQL Azure都不支持。通过自定义的Provider可以将membership中的数据存储到其它的关系数据库中,但是对于NoSQL数据库,实现起来非常麻烦。

二, Asp.net simple membership

Asp.net simple membership是再一次的改进,目标是让你更容易地将membership集成到现有的系统中。更容易体现在,它的外部依赖少,对于原有系统的侵入少。

可以定义自己的User表,然后通过下面代码, 生成membership工作所依赖的表,你就能将你系统中的User表和simple membership无缝对接起来。SimpleMembership没有强制的表结构, 所以你可以用任何你觉得舒服的定义自己的User表来存储User信息。这里实际中就是有2个User表,一个是你定义的User表;另一个是simple membership中的User表,只包含和membership相关的信息。

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", true);

下图是simple membership在数据库中生成的表

但是simple membership本质上也只是上一代membership的改良而已。从下面的图中能够看出来,simple membership是membership的另外一种实现,提供了一种方便使用的MembershipProvider。

由于这种原因, simple membership仍然摆脱不了一些弊病:

  • 仍然无法应用到NoSql数据库中.

  • 无法集成到OWIN中

  • 无法方便的扩展

三,Asp.net Identity简单介绍

Identity是微软设计的全新的独立的membership系统,是为所有的Asp.net应用提供服务的

Identity有下面优点:

  • Asp.net全境适用:  Asp.net, MVC, web api, SignalR

  • User信息自定义

  • 存储易于扩展: 默认使用EF Code First存储到数据库中,但是也非常容易扩展到SharePoint, Windows Azure Storage Table Service, NoSQL databases

  • 可单元测试

  • 角色: 有Role Provider,非常容易创建和管理角色

  • Claims权限信息: 相比简单的Role权限控制,Claims提供了更加丰富的内容

  • 社交化登录: 比如Facebook等

  • 支持Windows Azure Active Directory

  • 支持OWIN

  • Nuget发布和安装

Identity的原理以及基本设计思想

要完整的理解Identity,需要先了解OWINOWIN可以参考文章 下一代Asp.net开发规范OWIN(1)

基于OWIN的设计,使得Identity把membership抽象成了两块大的部分。一块是membership所依赖的数据的存储,一块是Identity的authentication部分。

全新的membership框架Asp.net Identity的更多相关文章

  1. 全新的membership框架Asp.net Identity(1)——.Net membership的历史

    在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp.net Identity. 每一次改 ...

  2. 全新的membership框架Asp.net Identity(2)——绕不过的Claims

    本来想直接就开始介绍Identity的部分,奈何自己挖坑太深,高举高打的方法不行.只能自己默默下载了Katana的源代码研究了好一段时间.发现要想能够理解好用好Identity, Claims是一个绕 ...

  3. 全新的membership框架Asp.net Identity——绕不过的Claims

    http://www.cnblogs.com/JustRun1983/p/4708176.html?utm_source=tuicool&utm_medium=referral

  4. 框架Asp.net Identity

    框架Asp.net Identity 在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp ...

  5. Migrating an Existing Website from SQL Membership to ASP.NET Identity

    Migrating an Existing Website from SQL Membership to ASP.NET Identity public class User : IdentityUs ...

  6. 微软的权限框架Asp.Net Identity

    Asp.Net Identity 深度解析 之 注册登录的扩展   关于权限每个系统都有自己的解决方案,今天我们来讨论一下微软的权限框架Asp.Net Identity ,介绍如下  http://w ...

  7. 从Membership 到 .NET4.5 之 ASP.NET Identity

    我们前面已经讨论过了如何在一个网站中集成最基本的Membership功能,然后深入学习了Membership的架构设计.正所谓从实践从来,到实践从去,在我们把Membership的结构吃透之后,我们要 ...

  8. [转]Membership 到 .NET4.5 之 ASP.NET Identity

    本文转自:http://www.cnblogs.com/jesse2013/p/membership-part3.html 我们前面已经讨论过了如何在一个网站中集成最基本的Membership功能,然 ...

  9. MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN

    在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣的,于是来一篇详解登录原理的文章.本文会涉及到Claims-based(基于声明)的认证,我们会详细 ...

随机推荐

  1. Java:Java 清单

    ylbtech-Java:Java 清单 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylb ...

  2. 微信小程序之wx.requestPayment 发起微信支付

    wx.requestPayment 发起微信支付 timeStamp 时间戳 nonceStr 随机字符串 package 统一下单接口返回的 prepay_id 参数值 signType 签名算法 ...

  3. ubuntu 14.04 no valid active connections found

    ubuntu 14.04 强制重启后出现不能上网,点击connection information 后出现error: no valid active connections found 解决办法是在 ...

  4. python‘s tenth day for me

    动态参数    *args   **kwargs   *args  动态参数,万能参数 # args 接受的就是实参对应的  所有位置参数,并将其放在元祖中. def func(*args): pri ...

  5. spring-cloud配置eureka客户端

    spring-cloud配置eureka客户端 eureka用来发现其他程序 需要提前配置eureka服务端,具体看 https://www.cnblogs.com/ye-hcj/p/10292944 ...

  6. 10.solr学习速成之高亮显示

    Solr高亮显示的三种实现 高亮显示在搜索中使用的比较多,比较常用的有三种使用方式,如果要对某field做高亮显示,必须对该field设置stored=true .          第一种是普通的高 ...

  7. Android 4 学习(11):Intent简介

    参考<Professional Android 4 Development> Intents 本文主要从这几个方面介绍Intents: 使用Intents在Android程序内部或外部通信 ...

  8. 通过class类获取类的成员变量和构造函数信息

  9. python3导入自定义模块

    模块是个好东西啊,大牛们开源共享许多模块也加快了大家开发的速度,许多开源模块可以在这里找到 ↓ https://pypi.python.org/pypi 因为刚入门所有有很多细节不懂,在网上搜寻资料的 ...

  10. textarea标签提示录入剩余字数

    textarea标签提示录入剩余字数 <textarea onkeydown="checkMaxInput(this,300)" onkeyup="checkMax ...