IdentityServer4 中文文檔 -14- (快速入門)使用 ASP.NET Core Identity

来源:http://www.cnblogs.com/ideck/archive/2017/08/11/ids_quickstarts_14.html
-Advertisement-
Play Games

IdentityServer4 是一個提供 認證服務,單點登錄/登出(SSO),API訪問控制,聯合認證通道的可定製、免費商業支持的框架。 ...


IdentityServer4 中文文檔 -14- (快速入門)使用 ASP.NET Core Identity


原文:http://docs.identityserver.io/en/release/quickstarts/6_aspnet_identity.html

上一篇:IdentityServer4 中文文檔 -13- (快速入門)切換到混合流並添加 API 訪問
下一篇:IdentityServer4 中文文檔 -15- (快速入門)添加 JavaScript 客戶端

IdentityServer 是為靈活性而設計的,其中的表現之一就是,它允許你使用任何你想要用的資料庫來存儲你的用戶以及他們的數據(包括賬戶密碼)。如果你正在從一個全新的用戶資料庫開始,那麼 ASP.NET Identity 是你的選項之一。這個快速入門顯示瞭如何以 IdentityServer 的方式使用 ASP.NET identity。

當前快速入門假設你已經通過了所有之前的快速入門。該快速入門使用 ASP.NET Identity 的方法是從 Visual Studio 中的 ASP.NET Identity 模板創建一個新的項目。新項目將替代之前的快速入門中我們從零開始構建的 IdentityServer 項目。解決方案中的其他所有項目(客戶端和API)都將保持不變。

用於 ASP.NET Identity 的新項目

第一步是為 ASP.NET Identity 添加一個新項目到你的解決方案中。

考慮到 ASP.NET Identity 需要大量代碼,使用 Visual Studio 中的模板會非常有意義。你最終將會刪除掉之前舊的 IdentityServer 項目(假設你之前是嚴格按照快速入門做的),但是你需要將一些項遷移過來(或者跟之前的快速入門一樣從零開始重寫)。

從創建一個新的 “ASP.NET Core Web 應用程式”項目開始:

然後選擇 “Web 應用程式” 選項:

然後點擊“更改身份驗證”按鈕,選擇“個人用戶賬戶”(這意味著使用的是 ASP.NET Identity):

最後是點擊確定以創建項目。

修改宿主

別忘了修改宿主(像之前描述的一樣)以讓應用程式運行在 5000 埠上。這對於讓已有的客戶端和 api 項目能繼續工作很重要。

添加 IdentityServer 程式包

添加 IdentityServer4.AspNetIdentity NuGet 程式包(目前的最新版本是“1.0.1”)。該程式包依賴於 IdentityServer4 程式包,所以這些會作為傳遞依賴被自動添加:

Scopes 和 客戶端 配置

儘管這是一個 IdentityServer 新項目,但是我們仍然需要與之前快速入門中一樣的 Scope 和 客戶端 配置。將之前快速入門中的配置類(Config.cs 文件)複製到現在這個新項目中。

(現在)需要對配置文件做的變更之一是禁用 MVC 客戶端的授權確認頁。我們還沒有將之前 IdentityServer 項目中的授權確認代碼拷貝過來,所以現在要對 MVC 客戶端進行修改,將 RequireConsent 設置為 false:

new Client
{
    ClientId = "mvc",
    ClientName = "MVC 客戶端",
    AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,

    RequireConsent = false,

    ClientSecrets =
    {
        new Secret("secret".Sha256())
    },

    RedirectUris           = { "http://localhost:5002/signin-oidc" },
    PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },

    AllowedScopes =
    {
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile,
        "api1"
    },
    AllowOfflineAccess = true
}

配置 IdentityServer

跟之前一樣,IdentityServer 需要在 Startup.cs 的 ConfigureServicesConfigure 中進行配置。

ConfigureServices

這裡同時展示了 ASP.NET Identity 模板生成的代碼以及 IdentityServer 需要的額外功能代碼(末尾)。在之前的快速入門中,AddTestUsers 擴展方法被用來註冊用戶,但是在現在這個環境中我們將用擴展方法 AddAspNetIdentity 替代它,以使用 ASP.NET Identity 用戶替代記憶體用戶。 AddAspNetIdentity 擴展方法需要一個泛型參數,即你的 ASP.NET 用戶類型(與模板中 AddIdentity 方法需要用戶類型參數一樣)。

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddMvc();

    services.AddTransient<IEmailSender, AuthMessageSender>();
    services.AddTransient<ISmsSender, AuthMessageSender>();

    services.AddIdentityServer()
        .AddTemporarySigningCredential()
        .AddInMemoryApiResources(Config.GetApiResources())
        .AddInMemoryClients(Config.GetClients())
        .AddInMemoryIdentityResources(Config.GetIdentityResources())
        .AddAspNetIdentity<ApplicationUser>();
}

Configure

這裡也同時展示了 ASP.NET Identity 模板生成的代碼以及 IdentityServer 需要的額外功能代碼(緊跟在 UseIdentity 之後)。當使用 ASP.NET Identity 時候,IdentityServer 放在 ASP.NET Identity 之後註冊到管道是很重要的,因為 IdentityServer 依賴於 ASP.NET Identity 創建和管理的認證Cookie。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();

    app.UseIdentity();

    app.UseIdentityServer();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

創建用戶資料庫

因為這是一個新的 ASP.NET Identity 項目,所以你需要創建資料庫。你可以在項目目錄下運行命令提示符,並運行命令 dotnet ef database update,像這樣:

創建用戶

現在,你應該能夠運行項目並創建/註冊用戶到資料庫了。啟動應用程式,然後點擊 Home 頁面的 “Register” 鏈接:

在註冊頁面上創建一個新的用戶帳戶:

那麼現在你就有了一個用戶賬戶了,你應該能夠登錄,使用客戶端以及調用 API。

登錄 MVC 客戶端

啟動 MVC 客戶端應用程式,你應該能夠點擊 “Secure” 鏈接來進入登錄頁:

你應該會被重定向到 ASP.NET Identity 登錄頁。使用新創建的用戶登錄:

登錄後,你應該已經直接跳過了授權確認頁面(想一下我們之前所做的變更),然後馬上就重定向回 MVC 客戶端應用程式,隨之你的用戶身份信息也應該被展示出來:

點擊 “Call Api using application identity”,你應該還能夠以用戶的身份調用 API:

那麼現在你已經是通過 ASP.NET Identity 的用戶進行登錄的了。

接下來做什麼?

之前快速入門中的 IdentityServer 項目提供了一個授權確認頁面,一個錯誤頁面,以及一個註銷頁面,現在這些丟失的代碼片段可以簡單地從先前的快速入門項目中拷貝過來。做完這一步,你就可以將舊的 IdentityServer 項目刪掉/清除了。還有,做完這一步後別忘了重新啟用 MVC 客戶端配置的授權確認頁(RequireConsent=true 標記)。

當前快速入門的樣例代碼已經為你完成了這些步驟,所以你可以快速地開始使用所有這些特性。祝你愉快!

上一篇:IdentityServer4 中文文檔 -13- (快速入門)切換到混合流並添加 API 訪問
下一篇:IdentityServer4 中文文檔 -15- (快速入門)添加 JavaScript 客戶端


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

-Advertisement-
Play Games
更多相關文章
  • 輸出重定向 重定向一般通過在命令間插入特定的符號來實現。特別的,這些符號的語法如下所示 command1 > file1 上面這個命令執行command1然後將輸出的內容存入file1。 註意任何file1內的已經存在的內容將被新內容替代。如果要將新內容添加在文件末尾,請使用>>操作符。 實例 執行 ...
  • 1. 引言 由於實習生轉正,公司給配了一臺新電腦,配置不用多說,16G記憶體,i7 7700的CPU,128SSD的系統盤,1T的機械硬碟,雖然只有一個破核顯。對於我個人而言,最重要的是系統從Windows7企業版升級到Windows10企業版,成為公司第一批使用Windows10的員工。 2. 在B ...
  • 一、直接使用C#操作資料庫的類庫ADO.NETADO.NET使用Connection對象來連接資料庫,使用Command或DataAdapter 對象來執行SQL語句,並將執行的結果返回給DataReader或DataAdapter,然後 再使用取得的DataReader或者DataAdapter對 ...
  • Entity Framework使用Code First方式時,實體之間已經配置好關係,根據實際情況某些情況下需要同時獲取導航屬性,比如獲取商品的同時需要獲取分類屬性(導航屬性),或者基於優化方面考慮等,下麵來看一個例子 例子中有會員實體類(Member)與角色實體類(Role),Role與Memb ...
  • 目前每日全網下發的推送消息大概是120億條,這些消息主要在Android設備上,平均每個Android用戶每天會收到30條以上的消息, 為什麼呢,主要是因為Android手機生態的原因,關閉消息太難. 所以Android設備的用戶每天生活在消息的轟炸之中,從業內的一些數據來看,現在Android的一... ...
  • “其實我們可以為治理霧霾做點什麼的。”在香港出生、美國上學、北京工作的伍毅恆一字一句地用普通話表達出了自己的願望。這天早上7點,北京市剛剛正式啟動了首次“霧霾紅色預警”。“這座大樓里,有我們最新的物聯網解決方案,供暖系統、空氣凈化和空調系統的所有數據我們都有,它們在雲端被處理,在我的圖表裡可以清楚看... ...
  • 第一次開發微信版網頁,對最重要的獲取微信OpenId,特此記錄下來 1.首先得有appid和appsecret 1 1. public class WeiXin { 2 3 public static string appid { 4 get { 5 string _appid = "wx3xxxx ...
  • 在最近做的一個將原來的舊系統翻新改造的項目中,為了在個別展示位置與原系統一直,研究了一下Easyui的panel面板,在panel的面板中動態添加Linkbuton按鈕的編輯方法,在這裡做個記錄免得自己以後忘了,也為有需求的人指明一條道,代碼比較亂,還請大家多多見諒,能實現就行啦,要求不高喲。 言歸 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...