IdentityServer(12)- 使用 ASP.NET Core Identity
IdentityServer具有非常好的擴充套件性,其中使用者及其資料(包括密碼)部分你可以使用任何想要的資料庫進行持久化。 如果需要一個新的使用者資料庫,那麼ASP.NET Core Identity是你的一個選擇。 本快速入門介紹瞭如何將ASP.NET Core Identity 和 IdentityServer4一起使用。
在閱讀這篇文章是,希望你能把前面的文章全部看一遍,瞭解基本使用和相關的理論。 這個快速入門使用ASP.NET Core Identity的方法是從Visual Studio中的ASP.NET Core Identity模板建立一個新專案。 這個新的專案將取代之前在之前的快速入門中從頭開始構建的IdentityServer專案。 此解決方案中的所有其他專案(對於客戶端和API)將保持不變。
建立ASP.NET Identity新專案
第一步是為您的解決方案新增一個ASP.NET Core Identity的新專案。 鑑於ASP.NET Core Identity需要大量程式碼,因此使用Visual Studio中的模板是最好的。 你最終將刪除IdentityServer的舊專案,但有幾個專案需要遷移(或按照之前的快速入門所述從頭開始重新編寫)。
建立一個ASP.NET Core Web應用程式
然後選擇Web應用程式(MVC)
然後點選“更改身份驗證”按鈕,選擇“個人使用者賬戶”
最後,你的設定應該是和下圖一樣:
修改hosting
不要忘記修改hosting以在埠5000上執行。這非常重要,這將關係到繼續使用現有的客戶端和API專案。
新增IdentityServer元件
新增IdentityServer4.AspNetIdentity
NuGet包。
Scopes 和 Clients 配置
儘管這是IdentityServer的一個新專案,但我們仍然需要與之前的快速入門一樣的配置Scopes 和 Clients。 將之前快速入門的配置類(在Config.cs中)複製到此新專案中。
對於現在的配置需要改變的是禁用MVC客戶端的許可。 我們還沒有複製之前的IdentityServer專案的許可程式碼,所以現在對MVC客戶端進行一次修改,並設定RequireConsent = false
:
new Client { ClientId = "mvc", ClientName = "MVC Client", 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:
以前我們使用AddTestUsers
擴充套件方法用於註冊使用者,但在這種現在的解決方案下,我們用AddAspNetIdentity
替換該擴充套件方法來使用ASP.NET Identity使用者。AddAspNetIdentity
擴充套件方法需要一個通用引數,它是你的ASP.NET Ientity使用者型別(與模板中的AddIdentity方法一樣)
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Add application services.
services.AddTransient<IEmailSender, EmailSender>();
services.AddMvc();
// configure identity server with in-memory stores, keys, clients and scopes
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryPersistedGrants()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients())
.AddAspNetIdentity<ApplicationUser>();
}
我們在將Asp.Net Identity新增到DI容器中時,一定要把註冊IdentityServer放在Asp.Net Identity之後,因為註冊IdentityServer會覆蓋Asp.Net Identity的一些配置,這個非常重要。
Configure
使用UseIdentityServer代替了對UseIdentity的呼叫
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
// app.UseAuthentication(); // not needed, since UseIdentityServer adds the authentication middleware
app.UseIdentityServer();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
建立使用者資料庫
鑑於這是一個新的ASP.NET Identity專案,您將需要建立資料庫。 您可以通過從專案目錄執行命令提示符並執行dotnet ef database update -c ApplicationDbContext
來完成此操作:
在VS程式包控制檯使用命令也是一樣的
Update-Database
建立使用者
此時,您應該能夠執行專案並在資料庫中建立/註冊使用者。 啟動應用程式,並從主頁點選“Register”連結:
並在註冊頁面上建立一個新的使用者帳戶:
現在你有一個使用者帳戶,你應該可以登入,使用客戶端,並呼叫API。
在MVC客戶端登入
啟動MVC客戶端應用程式,你應該能夠點選“Secure”連結登入。
您應該被重定向到ASP.NET Identity登入頁面。 用新建立的使用者登入:
登入後,您應該跳過同意頁面(給出我們上面所做的更改),並立即重定向到MVC客戶端應用程式,會顯示你的使用者資訊。
您還應該能夠單擊“Call API using application identity”來呼叫API:
現在,您已經從ASP.NET Ientity的使用者登入。
本文程式碼:https://github.com/IdentityServer/IdentityServer4.Samples/tree/release/Quickstarts/6_AspNetIdentity
原文:https://identityserver4.readthedocs.io/en/release/quickstarts/6_aspnet_identity.html