向空項目添加 ASP.NET Identity

来源:http://www.cnblogs.com/dongbeifeng/archive/2016/07/29/adding-aspnet-identity-to-an-empty-project.html
-Advertisement-
Play Games

向空項目添加 ASP.NET Identity 的基本步驟。 ...


安裝 AspNet.Identity 程式包

Microsoft.AspNet.Identity.Core 包含 ASP.NET Identity 核心介面
Microsoft.AspNet.Identity.EntityFramework ASP.NET Identity 的實體框架提供程式

添加用戶註冊代碼

var userStore = new UserStore<IdentityUser>();
var manager = new UserManager<IdentityUser>(userStore);

var user = new IdentityUser() { UserName = ... };
IdentityResult result = manager.Create(user, ...);

if (result.Succeeded)
{
}
else
{
}
  • UserStore 實現以下在 ASP.NET Identity Core 中定義的介面:
    • IUserStore,公佈用戶管理的基本 api
    • IUserLoginStore,此介面將用戶映射到 login 提供程式,例如 Google, Facebook, Twitter
    • IUserClaimStore 保存聲明。
    • IUserRoleStore  此介面將用戶映射到角色
  • IdentityUser 實現在 ASP.NET Identity Core 中定義的 IUser 介面,IUser 介面表示用戶。
  • UserManager 公佈向 UserStore 保存更改的 API。
  • IdentityResult 在 ASP.NET Identity Core 中定義,表示操作結果。

類間關係如圖:

安裝 Owin 程式包

Microsoft.AspNet.Identity.Owin 包含一組 OWIN 擴展類,用於管理和配置 OWIN 身份驗證中間件,這些類由 ASP.NET Identity.Core 程式包使用。
Microsoft.Owin.Host.SystemWeb 包含一個 OWIN 伺服器,使基於 OWIN 的應用程式可在 IIS 集成管道內運行。

添加 OWIN 啟動類和身份驗證配置類

[assembly: OwinStartup(typeof(Startup))]

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            Provider = new CookieAuthenticationProvider
            {
                // 當用戶登錄時使應用程式可以驗證安全戳。
                // 這是一項安全功能,當你更改密碼或者向帳戶添加外部登錄名時,將使用此功能。
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                    validateInterval: TimeSpan.FromMinutes(30),
                    regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
            }
        });            

    }
}

OwinStartupAttribute 用於配置啟動類,預設情況下會調用名為 Configuration 的方法,也可通過 MethodName 指定不同的方法名。

修改用戶註冊代碼

使用戶在註冊後自動登錄

var userStore = new UserStore<IdentityUser>();
var manager = new UserManager<IdentityUser>(userStore);

var user = new IdentityUser() { UserName = ... };
IdentityResult result = manager.Create(user, ...);

if (result.Succeeded)
{
    var authenticationManager = this.HttpContext.GetOwinContext().Authentication;
    var userIdentity = manager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
    authenticationManager.SignIn(new AuthenticationProperties() { }, userIdentity);
}
else
{
}  

ASP.NET Identity 和 OWIN Cookie Authentication 是基於聲明的,因此需要為用戶生成 ClaimsIdentity 對象。ClaimsIdentity 包含用戶所有的聲明信息,例如,用戶屬於哪些角色。可以在這裡為用戶添加更多聲明。通過調用 AuthenticationManager.SignIn 方法使用戶登錄。IAuthenticationManager 介面在 OWIN 中定義。這段代碼會產生一個 cookie,類似於 Forms 身份驗證的 FormAuthentication.SetAuthCookie 方法。

添加登錄代碼

var userStore = new UserStore<IdentityUser>();
var userManager = new UserManager<IdentityUser>(userStore);
var user = userManager.Find(...);

if (user != null)
{
    var authenticationManager = this.HttpContext.GetOwinContext().Authentication;
    var userIdentity = userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);

    authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, userIdentity);
    // 登錄成功
}
else
{
    // 登錄失敗
}

GetOwinContext 是一個擴展方法,在 Microsoft.Owin.Host.SystemWeb 程式集中定義,它返回 IOwinContext 對象,OwinContext 公佈 IAuthenticationManager 屬性,表示對本次請求可用的身份驗證中間件。

添加註銷代碼

var authenticationManager = this.HttpContext.GetOwinContext().Authentication;
authenticationManager.SignOut();

 原文地址:http://www.asp.net/identity/overview/getting-started/adding-aspnet-identity-to-an-empty-or-existing-web-forms-project


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • 寫這點東西主要是看到知乎上有人在討論相關的問題,但是有不少人都在說一些不嚴謹,甚至是完全錯誤 但是流傳甚廣的東西,甚至是一些大神都在說,以下根據我的回答總結。 一個很常見又很低級的誤區是:認為引用類型保存在堆上,值類型保存在棧上……其實這個問題幼稚得我懶得說……但是實在又忍不住吐槽。 很多人都在說這 ...
  • 開篇 每一個版本的.net都會引入一些新的特性,這些特性方便開發人員能夠快速實現一些功能。雖然.net版本一直在更新,但是新版本對舊版本的程式都是相容的,在這一點上微軟做的還是非常好的。每次學一個新內容,第一次接觸的方法在腦海裡占的位置還是比較重要的,從剛開始接觸.net的多線程編程是使用Threa ...
  • Ajax製作智能提示搜索[js效果,後續博客園會更下麵顯示的部分,只是一個簡單的搜索結果,真正的大型網站用的是lucene全文搜索引擎。 歡迎關註博客園wangwangwangMax, 新浪:NewITdog, 微信公眾號:wangwangwangMax ...
  • 初入碼田--ASP.NET MVC4 Web應用開發之一 實現簡單的登錄 初入碼田--ASP.NET MVC4 Web應用開發之二 實現簡單的增刪改查 2016-07-29 在次之前,需要一臺電腦(~ ̄▽ ̄)~,以及Visual Studio 2013或者更高版本,SQL Sever資料庫(暫時不用 ...
  • 當我們在後臺得到一個字元串後比如字元串內容是:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 我們要在每兩個或者多個加入一個逗號或者一個分號時候,這個時候很多人都想的是迴圈,這個確實也不錯,但是在迴圈的基礎上呢,大家都知道C#中有一個字元 ...
  • 目錄: 1.判斷是否為空或者null 2.普通包含模糊查詢 1)以某字元串開頭的模糊查詢 2)以某字元串結尾的模糊查詢 3)包含某字元串的模糊查詢 3.精確到字元串對應位數字元的模糊查詢(*重點) linq大家肯定用過,對於其中的模糊查詢肯定也有所瞭解 提起linq的模糊查詢首先大家想到的肯定是 C ...
  • 初入碼田--ASP.NET MVC4 Web應用之創建一個空白的MVC應用程式 初入碼田--ASP.NET MVC4 Web應用開發之一 實現簡單的登錄 2016-07-29 一、創建M002AdminDemo.cs 右鍵【Models】-->添加-->類 二、創建Vm002新增管理員視圖模型.cs ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...