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
  • 移動開發(一):使用.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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...