初探IdentityServer4(客戶端模式)
Oatuth2協議的客戶端模式介紹
-
Client Credentials Grant (客戶端模式)是Oauth2.0協議中,四種模式自建單的一種。它由兩部分構成, 客戶端 和 認證伺服器 。認證伺服器確認客戶端無誤後返回一個token,客戶端請求帶著token訪問資源。(一般使用場景是在一個安全的環境下,例如我的同一個系統中,一個api請求另外一個api)。
-
這裡借用下阮一峰老師畫的圖(部落格地址=》http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html)
IdentityServer4客戶端模式實現
-
首先我們建立一個core的api專案作為認證伺服器,新增nuget程式包IdentityServer4,將啟動埠設定為 5000 。
-
接下來新增一個類,取名字叫做Config,我們用它來初始化Identityserver(配置要保護的資源和可以訪問該API的客戶端伺服器)。
程式碼如下:
/// <summary> /// Idnetity配置,初始化Identityserver /// </summary> public class Config { //定義要保護的資源(webapi) public static IEnumerable<ApiResource> GetApiResources() { return new List<ApiResource> { new ApiResource("api1", "My API") }; } //定義可以訪問該API的客戶端 public static IEnumerable<Client> GetClients() { return new List<Client> { new Client() { ClientId = "client", AllowedGrantTypes = GrantTypes.ClientCredentials, //設定模式,客戶端模式 ClientSecrets = { new Secret("secret".Sha256()) }, AllowedScopes = { "api1" } } }; } }
-
接下來配置startup,將資源和客戶端的初始資訊服務加入到DI容器,同時引用IdentityServer中介軟體。程式碼如下所示:
public void ConfigureServices(IServiceCollection services) { services.AddIdentityServer() .AddDeveloperSigningCredential() .AddInMemoryApiResources(Config.GetApiResources()) //配置資源 .AddInMemoryClients(Config.GetClients()); //配置客戶端 services.AddMvc(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } //使用identityserver中介軟體 app.UseIdentityServer(); app.UseMvc(); }
-
再新增一個webapi專案,作為我們的資源伺服器。新增nuget包,IdentityServer4.AccessTokenValidation,將啟動埠設定為 5001 。
-
2、配置startup,新增認證伺服器地址,和apiname &&引用中介軟體,程式碼如下:
public void ConfigureServices(IServiceCollection services) { services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { options.Authority = "http://localhost:5000"; //配置Identityserver的授權地址 options.RequireHttpsMetadata = false; //不需要https options.ApiName = "api1"; //api的name,需要和config的名稱相同 }); services.AddMvc(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseAuthentication();// 新增認證中介軟體 app.UseMvc(); }
-
將受保護資源controller新增 [Authorize] 。(因為資源伺服器AddIdentityServerAuthentication 方法的引數和返回值都是AuthenticationBuilder(類似於一箇中間件),所以可以多次呼叫AddIdentityServerAuthentication方法來控制這個api 資源可以讓誰訪問到。)
-
最開始我們直接訪問資源伺服器的api,返回401,因為我們的資源被保護了。
-
-
這時候來到IdentityServer4的官網,官網給出了這麼一個地址=》
-
我們訪問這個地址時候,它會返回我們的Config配置=》
-
其中有一個token_endpoint的url地址,我們帶著Client的配置來訪問它=》
-
此時拿到Token,再帶著token去訪問我們的資源,爭取獲取到資源資料=》
https://github.com/conanl5566/dotnet-core-Example/tree/master/WebApplication25
- Windows啟動和停止jar包命令
- .Net Core 限流控制-AspNetCoreRateLimit
- 金三銀四面試:C#.NET面試題高階篇1-多執行緒
- 面試必備:常見的.NET開發效能優化面試題
- 金三銀四面試:C#程式設計師經常遇到的30道基礎面試題,想你所想
- 疫情之下,海外物價全線上漲,這個行業終於迎來爆發!我把它當副業月入3萬多,新手月入過萬的乾貨...
- ASP .NET CORE 根據環境變數支援多個 appsettings.json
- .Net中使用 RocketMQ佇列詳解
- 2022平安新戶神卡再升級,不玩虛的權益太贊,沒申請過的快進!
- 開發事故--兩個小時,我的簡訊介面被呼叫了 4W 次
- ELK kafka docker快速搭建 .NetCore中使用
- 為新年做準備:.Net工程師面試經驗總結
- 平安新戶終免白金卡再升級,還限免88元哪吒卡面定製費!
- 初探IdentityServer4(客戶端模式)
- MySQL效能優化
- 新發現滴滴打車漏洞,請低調使用!(防刪速看-
- 面試官:引入RabbitMQ後,你如何保證全鏈路資料100%不丟失?
- 微服務統計,分析,圖表,監控一體化的HttpReports專案在.Net Core 中的使用
- “秒殺”問題的資料庫和SQL設計
- 推薦Mongodb GUI 視覺化管理工具-NoSQLBooster