官網文檔地址:點我點我
准備
創建一個名為IdentityServer
的ASP.NET Core Web Api 項目,端口5000
創建一個名為Api
的ASP.NET Core Web Api 項目,端口5001
創建一個名為Web
的應用程序,端口5002
基本配置
首先創建一個新的ASP.NET Core項目。
然后選擇“空白”選項。
注:這里創建空的應用程序是為了后面方便引入UI界面
接下來,使用nuget添加IdentityServer4
包
或者,也可以使用軟件包管理器控制台通過運行以下命令來添加依賴項
Install-Package IdentityServer4
在IdentityServer
中使用通常的模式來配置和添加服務到ASP.NET Core Host
在ConfigureServices
中,所有的服務必須配置並且依賴注入到系統中。
在Configure
中,中間件被添加到HTTP管道中。
public void ConfigureServices(IServiceCollection services) { //配置身份服務器與內存中的存儲,密鑰,客戶端和資源 services.AddIdentityServer().AddDeveloperSigningCredential(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } //添加到HTTP管道中。 app.UseIdentityServer(); app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); }
AddIdentityServer
方法在依賴注入系統中注冊IdentityServer,它還會注冊一個基於內存存儲的運行時狀態,這對於開發場景非常有用,對於生產場景,您需要一個持久化或共享存儲,如數據庫或緩存。
擴展的AddDeveloperSigningCredential
用於簽署令牌創建臨時密鑰。
修改hosting
修改啟動端口,打開Properties下的launchSettings.json修改applicationUrl
中的端口改為5000,注:這里修改啟動端口是為了方便調試
使用客戶端憑證保護API
在這種情況下,我們將定義一個API和一個想要訪問它的客戶端。客戶端將在IdentityServer
上請求訪問令牌,並使用它來訪問API。
在IdentityServer
項目中新建個Config.cs
類,並添加以下代碼:
/// <summary> /// 定義api信息 /// </summary> /// <returns></returns> public static IEnumerable<ApiResource> GetApiResources() { return new List<ApiResource> { new ApiResource("api1", "My API") }; }
ps:ApiResource
類為IdentityServer
中的實體類,這里引用IdentityServer4.Models
命名空間即可。
定義客戶端
定義一個可以訪問這個API的客戶端。對於這種情況,客戶端將不具有交互式用戶,並將使用IdentityServer
的所有客戶端密鑰進行身份驗證。在Config.cs
中添加如下代碼:
public static IEnumerable<Client> GetClients() { return new List<Client> { new Client { ClientId = "client", //沒有交互式用戶,使用clientid / secret進行身份驗證 AllowedGrantTypes = GrantTypes.ClientCredentials, //秘密認證 ClientSecrets = { new Secret("secret".Sha256()) }, //客戶端可以訪問的范圍 AllowedScopes = {"api1"} } }; }
注冊IdentityServer服務
要配置IdentityServer
以便使用定義好的訪問控制,您需要向該ConfigureServices
方法添加代碼。您可以使用方便的擴展方法 ,將相關的存儲和數據添加到DI系統中:
public void ConfigureServices(IServiceCollection services) { //配置身份服務器與內存中的存儲,密鑰,客戶端和資源 services.AddIdentityServer() .AddDeveloperSigningCredential() .AddInMemoryApiResources(Config.GetApiResources())//添加api資源 .AddInMemoryClients(Config.GetClients());//添加客戶端 }
運行項目並在瀏覽器中訪問:http://localhost:5000/.well-known/openid-configuration
,可以看到所有的文檔。這將被您的客戶端和API用於下載必要的配置數據。