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


在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等這些控件)和一套現成的管理頁面用來配置。(如下圖)

justrun_aspnet

微軟一直的優勢,就是非常的傻瓜化,什么都是現成的,直接拿來就用,但是也帶來了一個負面的影響,就是適應性差,缺乏彈性,無法應對實際應用中的差別需求, 這主要體現在:

  • 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在數據庫中生成的表

image

但是simple membership本質上也只是上一代membership的改良而已。從下面的圖中能夠看出來,simple membership是membership的另外一種實現,提供了一種方便使用的MembershipProvider。

image

由於這種原因, 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部分。

下一篇,將通過一個實際的例子,來分析Identity的具體使用以及背后的設計。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM