ASP.NET Core的身份認證框架IdentityServer4--(1)服務配置


官網文檔地址:點我點我

項目實例源碼地址

准備

創建一個名為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")
        };
}
psApiResource類為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用於下載必要的配置數據。

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM