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 的 ConfigureServices
和 Configure
中進行配置。
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 客戶端