IdentityServer具備很是好的擴展性,其中用戶及其數據(包括密碼)部分你可使用任何想要的數據庫進行持久化。 若是須要一個新的用戶數據庫,那麼ASP.NET Core Identity是你的一個選擇。 本快速入門介紹瞭如何將ASP.NET Core Identity 和 IdentityServer4一塊兒使用。html
在閱讀這篇文章是,但願你能把前面的文章所有看一遍,瞭解基本使用和相關的理論。 這個快速入門使用ASP.NET Core Identity的方法是從Visual Studio中的ASP.NET Core Identity模板建立一個新項目。 這個新的項目將取代以前在以前的快速入門中從頭開始構建的IdentityServer項目。 此解決方案中的全部其餘項目(對於客戶端和API)將保持不變。git
第一步是爲您的解決方案添加一個ASP.NET Core Identity的新項目。 鑑於ASP.NET Core Identity須要大量代碼,所以使用Visual Studio中的模板是最好的。 你最終將刪除IdentityServer的舊項目,但有幾個項目須要遷移(或按照以前的快速入門所述從頭開始從新編寫)。github
建立一個ASP.NET Core Web應用程序數據庫
而後選擇Web應用程序(MVC)api
而後點擊「更改身份驗證」按鈕,選擇「我的用戶帳戶」mvc
最後,你的設置應該是和下圖同樣:app
不要忘記修改hosting以在端口5000上運行。這很是重要,這將關係到繼續使用現有的客戶端和API項目。asp.net
添加IdentityServer4.AspNetIdentity
NuGet包。ide
儘管這是IdentityServer的一個新項目,但咱們仍然須要與以前的快速入門同樣的配置Scopes 和 Clients。 將以前快速入門的配置類(在Config.cs中)複製到此新項目中。ui
對於如今的配置須要改變的是禁用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須要在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客戶端應用程序,你應該可以點擊「Secure」連接登陸。
您應該被重定向到ASP.NET Identity登陸頁面。 用新建立的用戶登陸:
登陸後,您應該跳過贊成頁面(給出咱們上面所作的更改),並當即重定向到MVC客戶端應用程序,會顯示你的用戶信息。
您還應該可以單擊「Call API using application identity」來調用API:
如今,您已經從ASP.NET Ientity的用戶登陸。
本文代碼:https://github.com/IdentityServer/IdentityServer4.Samples/tree/master/Quickstarts/8_AspNetIdentity
原文:https://identityserver4.readthedocs.io/en/latest/quickstarts/8_aspnet_identity.html
額外,同時使用ASP.NET Identity和EF的示例請看:https://github.com/IdentityServer/IdentityServer4.Samples/tree/master/Quickstarts/Combined_AspId_and_EFStorage