1. 程式人生 > >ASP.NET Identity簡介及簡單使用

ASP.NET Identity簡介及簡單使用

Why Identity?

ASP.NET Identity wasdesigned to solve site membership requirements.

一、Advantageof ASP.Net Identity


微軟在.NET Framework 4.5 中推出了ASP.NET Identity,它為ASP.NET 應用程式提供了一系列的API用來管理和維護使用者,有以下優點:

易於整合:ASP.NET Identity 可以用在所有的 ASP.NET 框架上,例如 ASP.NET MVC, Web Forms,Web Pages,ASP.NET Web API

持久化:預設情況下,ASP.NET Identity將使用者所有的資料儲存在

資料庫中。ASP.NET Identity 使用 Entity Framework 實現其所有的檢索和持久化機制。

通過Code First,你可以對資料庫架構的完全控制,一些常見的任務例如改變表名稱、改變主鍵資料型別等都可以很輕易地完成。

基於宣告的:ASP.NET Identity 支援基於宣告的身份驗證,它使用一組"宣告"來表示使用者的身份標識。相對於"角色","宣告"能使開發人員能夠更好地描述使用者的身份標識。"角色"本質上只是一個布林型別(即"屬於"或"不屬於"特定角色),而一個"宣告"可以包含更多關於使用者標識和成員資格的資訊。

二、ASP.NETIdentity主要組成部分

 

ApplicationUser和ApplicationDbContext分別繼承自己Microsoft.AspNet.Identity.EntityFramework的IdentityUser和IdentityDbContext。但與使用者相關的操作實際上是通過Microsoft.AspNet.Identity.Core的 UserManager類來完成的,而UserManager的所有操作最終是由UserStore實現。

 

三、傳統ASP.NET身份驗證方式

安全問題一直是ASP.NET的關注點。其中,Windows驗證和表單驗證(Forms Authentication)就是ASP.NET兩種主要的安全機制。

Windows驗證:一般用於區域網應用。使用Windows驗證時,使用者的Windows安全令牌在使用者訪問整個網站期間使用HTTP請求,進行訊息傳送。應用程式會使用這個令牌在本地(或者域)裡驗證使用者賬號的有效性,也會評估使用者所在角色所具備的許可權。當用戶驗證失敗或者未授權時,瀏覽器就會定向到特定的頁面讓使用者輸入自己的安全憑證(使用者名稱和密碼)。

Forms驗證:Windows驗證的侷限性非常明顯,一旦使用者有超出本地域控制器範圍的外網使用者訪問網站,就會出現問題。ASP.NET表單驗證(Forms Authentication)很好的彌補了這一缺陷。使用表單驗證,ASP.NET需要驗證加密的HTTP cookie或者查詢字串來識別使用者的所有請求。cookie與ASP.NET會話機制(session)的關係密切,在會話超時或者使用者關閉瀏覽器之後,會話和cookie就會失效,使用者需要重新登入網站建立新的會話。

四、ASP.NETIdentity驗證的原理

講到Identity的驗證方式就繞不過Claims的認證方式,Claims認證最大的好處就是簡單的隔離了驗證(Authentication)和授權(Authorization)兩個部分,但這也是它最大的優勢。


.NET下Claims-based認證的主要由ClaimsIdentity以及ClaimsPrincipal這兩個類組成,ClaimsIdentity可以理解為攜帶使用者資訊的證書,而ClaimsPrincipal可以理解為應用頒發的令牌,當然,認證機構可以是應用本身,也可以是實現Owin(OpenWeb Interface for .NET)方式的第三方認證。



來源:http://blog.csdn.net/MosMovon/article/details/50630390

 32人閱讀 評論(0) 收藏 舉報

目錄(?)[+]

1. 什麼是 ASP.NET Identity

ASP.NET Identity 是微軟推出,用於在ASP.Net應用中管理使用者的元件。

The mainstay for user management in recent years has been ASP.NET Membership, which has suffered from design choices. The biggest limitation is that the schema used to store the data worked only with SQL Server and was difficult to extend without re-implementing a lot of provider classes. The schema itself was overly complex, which made it harder to implement changes than it should have been.

  --Pro ASP.NET MVC 5 Platform

2. 如何配置ASP.NET Identity with MySQL

2.1 配置ASP.NET Identity

2.1.1 安裝相應的元件包

Microsoft.AspNet.Identity.EntityFramework

Microsoft.AspNet.Identity.OWIN

Microsoft.Owin.Host.SystemWeb

2.1.2 自定義核心元件

$ User model

預設的user model是 IdentityUser(Microsoft.AspNet.Identity.EntityFramework)。這個類有12個內建的屬性,如 Id、UserName、PasswordHash、Email等

一般,根據業務需求,我們需要其它額外的屬性。我們可以建立一個繼承自IdentityUser的自定義類,在這個自定義類中新增額外的屬性。

  1. using Microsoft.AspNet.Identity.EntityFramework  

  2. publicclass AppUser : IdentityUser {  

  3.     // 在這裡新增額外的屬性

  4. }  

$ DB Context

一般我們需要改變Identity用到的資料庫表的名稱。預設的資料庫表為:AspNetUsers、AspNetUserRoles、AspNetUserLogins、AspNetUserCliams、AspNetRoles。

  1. using System.Data.Entity;  

  2. using Microsoft.Asp.Net.Identity.EntityFramework;  

  3. publicclass AppIdentityDbContext : IdentityDbContext<AppUser> {  

  4.     public AppIdentityDbContext() : base("IdentityDb") { }  

  5.     public AppIdentityDbContext(string connectionString)  

  6.         : base(connectionString) {  

  7.     }  

  8.     protectedoverridevoid OnModelCreating(DbModelBuilder modelBuilder {  

  9.         base.OnModelCreating(modelBuilder);  

  10.         modelBuilder.Entity<AppUser>().ToTable("user");  

  11.         modelBuilder.Entity<IdentityRole>().ToTable("role");  

  12.         modelBuilder.Entity<IdentityUserRole>().ToTable("userrole");  

  13.         modelBuilder.Entity<IdentityUserClaim>().ToTable("userclaim");  

  14.         modelBuilder.Entity<IdentituUserLogin>().ToTable("userlogin");  

  15.     }  

  16. }  

$ DB 初始化

如果你不熟悉Identity的資料庫表的結構,可以通過程式碼讓Identity自動建立。

如果你比較熟悉,那我推薦用專業的資料庫管理工具來建立,如MySQL Workbench。

程式碼示例。一般初始化程式碼只需要執行一次,好好斟酌策略,防止資料被刪。

  1. using System.Data.Entity;  

  2. publicclass AppIdentityDbContext : IdentityDbContext<AppUser> {  

  3.     ...  

  4.     static AppIdentityDbContext() {  

  5.         Database.SetInitializer<AppIdentityDbContext>(new IdentityDbInit());  

  6.     }  

  7. }  

  1. using System.Data.Entity;  

  2. using Microsoft.AspNet.Identity;  

  3. using Microsoft.AspNet.Identity.EntityFramework;  

  4. publicclass IdentityDbInit : DropCreateDatabaseAlways<AppIdentityDbContext> {  

  5.     protectedd overridevoid Seed(AppIdentityDbContext context) {  

  6.         this.InitAdmin(context);  

  7.         base.Seed(context);  

  8.     }  

  9.     publicvoid InitAdmin(AppIdentityDbContext context) {  

  10.         string adminName = "admin";  

  11.         string adminPassword = "changeme";  

  12.         string adminRoleName = "Administrators";  

  13.         // 建立使用者

  14.         UserManager<AppUser> userManager = new UserManager<AppUser>(  

  15.             new UserStore<AppUser>(context));  

  16.         var user = new AppUser { UserName = adminName };  

  17.         userManager.Create(user, adminPassword);  

  18.         // 建立角色

  19.         RoleManager<IdentityRole> roleManager = new RoleManager<IdentityRole>(  

  20.             new RoleStore<IdentityRole>(context));  

  21.         var adminRole = roleManager.Create(new IdentityRole(adminRoleName));  

  22.         // 給使用者賦予角色

  23.         userManager.AddToRole(user.Id, adminRoleName);  

  24.     }  

  25. }  

$ 配置

  1. using Microsoft.AspNet.Identity;  

  2. using Microsoft.AspNet.Identity.EntityFramework;  

  3. using Microsoft.AspNet.Identity.Owin;  

  4. using Microsoft.Owin;  

  5. using Microsoft.Owin.Security.Cookies;  

  6. using Owin;  

  7. publicclass IdentityConfig {  

  8.     publicvoid Configuration(IAppBuilder app) {  

  9.         app.CreatePerOwinContext<AppIdentityDbContext>(() => new AppIdentityDbContext());  

  10.         app.CreatePerOwinContext<UserManager<AppUser>>(  

  11.             (o, c) => new UserManager<AppUser>(new UserStore<AppUser>(  

  12.                 c.Get<AppIdentityDbContext>())));  

  13.         app.CreatePerOwinContext<RoleManager<IdentityRole>>(  

  14.             (o, c) => new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(  

  15.                 c.Get<AppIdentityDbContext>())));  

  16.         app.UseCookieAuthentication(new CookieAuthenticationOptions {  

  17.             AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,  

  18.             LoginPath = new PathString("/Account/Login")  

  19.         });  

  20.     }  

  21. }  

2.1.3 配置web.config

  1. <configuration>

  2.   <appSettings>

  3.     <addkey="owin:AppStartup"value="IdentityConfig"/>

  4.     ...  

  5.   </appSettings>

  6.   ...  

  7. 相關推薦

    ASP.NET Identity簡介簡單使用

    Why Identity?ASP.NET Identity wasdesigned to solve site membership requirements.一、Advantageof ASP.Net Identity微軟在.NET Framework 4.5 中推出了AS

    ASP.NET Identity簡介

    Why Identity? ASP.NET Identity wasdesigned to solve site membership requirements. 一、Advantageof ASP.NET Identity 微軟在.NET Framework 4

    ASP.NET Identity 使用簡介

    1. 什麼是 ASP.NET Identity ASP.NET Identity 是微軟推出,用於在ASP.NET應用中管理使用者的元件。 The mainstay for user management in recent years has been ASP.NET Membership, which

    ASP.NET 創建WebService——簡單例子

    本地 解析 com 調用 net XML ges png hone Web service是一個基於可編程的web的應用程序,用於開發分布式的互操作的應用程序,也是一種web服務 WebService的特性有以下幾點: 1.使用XML(標準通用標記語言)來作為數據交互的

    Asp.Net.Identity認證不依賴Entity Framework實現方式

    aps 新建 create exc spn sharp 個數 blank aspnet Asp.Net.Identity為何物請自行搜索,也可轉向此文章http://www.cnblogs.com/shanyou/p/3918178.html 本來微軟已經幫我們將授權、認證

    Asp.net core 中間件簡單應用

    tar 處理 分享 val tin mvc values 管道 esc   Asp.net core中間件 ,處理http請求和響應的中間組件,對比起asp.net ,asp.net core 管道機制,可以說是帥氣十足,簡單直接。下面是通過中間件對一個請求的url 指定路

    ASP.net core 2.0.0 中 asp.net identity 2.0.0 的基本使用(一)

    使用 相對路徑 註意 apps 模型視圖 hand getc 技術分享 star 開發環境:vs2017 版本:15.3.5 項目環境:.net framework 4.6.1 模板asp.net core 2.0 Web應用程序(模型視圖控制器) 身份

    C#可擴展編程之MEF學習筆記(一):MEF簡介簡單的Demo(轉)

    com ring this exec hosting code .cn 引用 展開 在文章開始之前,首先簡單介紹一下什麽是MEF,MEF,全稱Managed Extensibility Framework(托管可擴展框架)。單從名字我們不難發現:MEF是專門致力於解決擴展性

    Asp.Net 設計模式 之 “簡單工廠”模式

    相關 如果 cnblogs 獲取 自動 ber c# thread operation 主要思想:      public static Operation CreateFactory(string ope) { //實例化空父類,讓

    Asp.net Identity 修改默認數據庫,增加自定義字段

    擴展 studio required ssa 字段 profile 服務器 cat fix visual studio 2013 先新建一個項目 選擇MVC,確定 打開 Views\Shared\_Layout.cshtml文件,按自己的要求修改 改 [ht

    C#中的IEnumerable簡介簡單實現實例

    list orm 替換 valid src move codes 更新 使用 IEnumerable這個接口在MSDN上是這麽說的,它是一個公開枚舉數,該枚舉數支持在非泛型集合上進行簡單的叠代。換句話說,對於所有數組的遍歷,都來自IEnumerable,那麽我們就可以利用

    使用ASP.NET SignalR實現一個簡單的聊天室

    spl 記錄 歷史 undefine reat 語句 關鍵字 pda name  前言   距離我寫上一篇博客已經又過了一年半載了,時間過得很快,一眨眼,就把人變得滄桑了許多。青春是短暫的,知識是無限的。要用短暫的青春,去學無窮無盡的知識,及時當勉勵,歲月不待人。今天寫個隨

    Asp.net core 過濾器的簡單使用

    sta 簡單使用 .net core sof onf 明顯 新建 cti 需要 今天學習Filter過濾器的簡單使用,特此分享出來一起進步, 首先需要建立Asp.net項目 在根目錄下新建ActonFilter類繼承Microsoft.AspNetCore.Mvc.Filt

    ASP.NET Core 配置 EF SQLite 支持 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

    microsoft 下載 sqlit 圖片 sqli 可能 ssi htm 技術 原文:ASP.NET Core 配置 EF SQLite 支持 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程 ASP.NET Core 配置 EF SQLite 支持

    ASP.NET Core 屬性路由 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

    clear 產生 names border 知識 是我 netcore sid tps 原文:ASP.NET Core 屬性路由 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程 ASP.NET Core 屬性路由 經過前面章節的學習,

    ASP.NET Core 使用 EF 框架查詢數據 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

    而且 ews dbcontext ret ogg rabl models 編號 context 原文:ASP.NET Core 使用 EF 框架查詢數據 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程 ASP.NET Core 使用 EF 框架查詢數據

    ASP.NET Core 視圖 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

    參數傳遞 文件 htm 代碼 關聯 ide sof info 內容 原文:ASP.NET Core 視圖 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程 ASP.NET Core 視圖 花了幾章節,終於把 ASP.NET Cor

    ASP.NET Core 數據庫上下文 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

    ont code () entity clr stat hello 種類 刪除 原文:ASP.NET Core 數據庫上下文 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程 ASP.NET Core 數據庫上下文 上一章節中我們了解了 Ent

    ASP.NET Core 配置 Entity Framework Core - ASP.NET Core 基礎教程 - 簡單教程,簡單編程

    先來 server tps 設計 cos ble ESS thead 安裝失敗 原文:ASP.NET Core 配置 Entity Framework Core - ASP.NET Core 基礎教程 - 簡單教程,簡單編程 ASP.NET Core 配置 E