日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【实战 Ids4】║ 控制台密码模式搭配Ocelot网关

發布時間:2023/12/4 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【实战 Ids4】║ 控制台密码模式搭配Ocelot网关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(此歲只能云賞櫻了)

書接上文,這些天一直在研究IdentityServer4(下文簡稱Ids4)框架,發現有很多有意思,或者說比我想象中的知識點,可擴展的多,所以比較開心能鉆研進去,就像當時學習ASP.NET Core一樣,越學越感覺有意思的,我自認為ASP.NET Core已經學的基本出師了,希望Ids4我也能學到出師,畢竟要干一件事就要做好它。

在之前的公眾號文章中呢,我已經對多個客戶端進行了遷移,比如JS模式,MVC模式:

【實戰 Ids4】║ 客戶端、服務端、授權中心全線打通!

【實戰 Ids4】║ 又一個項目遷移完成(MVC)

在我的開篇講中,一共說到了平時開發常見的模式有以下幾個:

簡化模式和授權碼模式已經說完了,分別對應了JS客戶端和MVC客戶端,那今天就說一下第三種密碼授權模式——控制臺調用,之前之所以沒說,是因為太簡單了,那今天正好配合著Ocelot 網關一起講講,也不算濫竽充數。

正文開始。

1、認證中心配置客戶端

這一步很簡單,我們只需要增加一個Client即可:

// 控制臺客戶端 密碼模式new Client{ClientId = "Console",ClientSecrets = { new Secret("secret".Sha256()) },AllowedGrantTypes = new List<string>(){GrantTypes.ResourceOwnerPasswordAndClientCredentials.FirstOrDefault(),},AllowedScopes = new List<string>{"blog.core.api"}}

簡單來說,是允許一個名為Console的客戶端,使用密碼模式,通過我們的認證中心,來訪問blog.core.api的資源服務器,具體什么意思,相信應該都能看的懂,這里不贅述。

2、創建控制臺客戶端

上邊我們已經配置好,下邊我們就直接創建對應的客戶端來測試吧。

打開vs2019,創建NetCore的控制臺應用程序

創建好后,引用?IdentityModel?Nuget包

<ItemGroup><PackageReference Include="IdentityModel" Version="4.1.1" /></ItemGroup>

接下來,就是簡單寫代碼了

static async Task Main(string[] args){using var client = new HttpClient();var?discoResponse?=?await?client.GetDiscoveryDocumentAsync("http://localhost:5004");if (discoResponse.IsError){Console.WriteLine(discoResponse.Error);return;}var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest{Address = discoResponse.TokenEndpoint,ClientId = "Console",// 客戶端idScope = "blog.core.api",// 對應的受保護資源服務器idClientSecret = "secret",UserName = "laozhang",// 這里的用戶名密碼,是我SeedData的時候導入的Password = "BlogIdp123$InitPwd"});if (tokenResponse.IsError){Console.WriteLine(tokenResponse.Error);return;}Console.WriteLine(tokenResponse.Json);client.SetBearerToken(tokenResponse.AccessToken);// 獲取access_token后,向資源服務器發起請求var response = await client.GetAsync("http://localhost:8081/api/blog/1");Console.WriteLine(response.IsSuccessStatusCode ?$"{response.StatusCode} {await response.Content.ReadAsStringAsync()}" :response.StatusCode.ToString());}

我已經對部分地方加了注釋,相信你應該能看的懂,簡單來說,就是通過賬號信息向Ids4認證中心(5004)發起請求,獲取到access_token,然后帶上這個token向資源服務器(8081)發起請求,沒錯就是我們的Blog.Core項目,注意這個代碼是is4分支的,不是master的。

然后還要注意Blog.Core的授權地址要改成localhost:5004,而不是ids.neters.club。

"ApiName": "Blog.Core","IdentityServer4": {"AuthorizationUrl": "https://ids.neters.club"}

3、開啟三端,聯調測試

這里的三端分別是:認證中心、資源服務器、還有剛剛創建的控制臺。

這里肯定沒問題,我簡單放兩個結果圖:

(獲取到了token)

(訪問資源服務器,返回結果)

(為表示正確性,我這里貼出來api確實是加密的)

那現在我們的控制臺密碼授權模式已經說完了,那接下來就簡單說一下如果使用Ocelot來實現api網關吧。

4、創建Ocelot API網關

再創建一個空的API項目,端口設置3000

添加配置數據

{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"AllowedHosts": "*","ReRoutes": [{"DownstreamPathTemplate": "/api/blog/1",// 下游api項目的接口"DownstreamScheme": "http","DownstreamHostAndPorts": [{"Host": "localhost","Port":?8081 // 下游api項目,可以配置多個}],"UpstreamPathTemplate": "/api/blog/1",// 自定義模板"UpstreamHttpMethod": [ "Get" ]}] }

引用Ocelot的Nuget包

<ItemGroup><PackageReference Include="Ocelot" Version="14.1.0" /> </ItemGroup>

注冊服務和添加中間件

public void ConfigureServices(IServiceCollection services) {services.AddControllers();services.AddOcelot(); }public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.UseRouting();app.UseOcelot();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});}

我們發起請求訪問

當然,這是很正常的,證明我們已經成功的把資源服務器的8081,交給了3000的Ocelot網關了。

5、修改控制臺請求

剛剛我們的控制臺客戶端,請求的是資源服務器,那我們現在改成API網關,看是否依然可以:

沒錯,依然是可行的。

到了這里,我們已經成功的學會了:

1、如何使用密碼授權模式;

2、如何控制臺客戶端發起請求;

3、如何使用Ocelost API網關;

4、如何基于網關進行Ids4的授權認證操作;

好啦,今天就到這里吧,窗外陽光明媚,春暖花開。

總結

以上是生活随笔為你收集整理的【实战 Ids4】║ 控制台密码模式搭配Ocelot网关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。