日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ids4 认证保护 API 方案更新

發(fā)布時(shí)間:2023/12/4 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ids4 认证保护 API 方案更新 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

時(shí)刻保持
學(xué)習(xí)的喜悅

可能你咋一看這個(gè)標(biāo)題不知道什么意思,其實(shí)我也沒想好怎么表達(dá),因?yàn)槭且粋€(gè)特別簡(jiǎn)單的小知識(shí)點(diǎn)。

先說下為什么突然說到了Ids4?

這幾天大家都知道,我在視頻《微服務(wù)之eShop講解》,目前講到了購(gòu)物車微服務(wù)部分,看到了官方架構(gòu)中用到了Ids4的認(rèn)證平臺(tái),和保護(hù)資源Api,和我寫的認(rèn)證方案不一樣,所以我就開始研究了下官方,發(fā)現(xiàn)了原因,所以想主要是一個(gè)項(xiàng)目更新的說明流水賬,同時(shí)也是想再一次的強(qiáng)調(diào)官網(wǎng)的重要性。

再說下今天要說的內(nèi)容是什么。

如果你經(jīng)常看我的項(xiàng)目,或者跟著我的教程,肯定都知道我的BCVP項(xiàng)目,是集成了ASPNETCORE、VUE、IDS4三方的統(tǒng)一架構(gòu)設(shè)計(jì)平臺(tái),而且之前的有一篇文章,我也說到了Ids4官網(wǎng)已經(jīng)升級(jí)到了4.x——《【Ids4實(shí)戰(zhàn)】最全的 v4 版本升級(jí)指南》。更新的內(nèi)容還是很多的,絕大多數(shù)的更新還是ids4認(rèn)證平臺(tái)的,其實(shí)在其他的地方也有了些許的變化,今天說的就是關(guān)于受保護(hù)資源服務(wù)器的一個(gè)小更新,關(guān)于ProtectingAPIs這一章節(jié)的。

?好啦,現(xiàn)在已經(jīng)說明了來意,剩下的就是上代碼了,下邊提到的代碼都是關(guān)于Blog.Core里的,自己可以更新查看。

1、之前版本是如何保護(hù)Api的

在Authentication_Ids4Setup.cs中,我定義了一個(gè)服務(wù)擴(kuò)展,用來添加Ids4的認(rèn)證服務(wù),其中有兩個(gè)部分,第一個(gè)部分就是添加認(rèn)證服務(wù):

services.AddAuthentication()

第二個(gè)部分就是相應(yīng)的認(rèn)證方案,只不過之前Ids4的3.x系列,有兩個(gè)寫法,

第一個(gè)就是基于AspNetCore服務(wù)的:

public class Startup {public void ConfigureServices(IServiceCollection services){services.AddMvc();services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>{//?認(rèn)證服務(wù)器的根路徑options.Authority?=?"https://ids.neters.club";// API資源名options.Audience = "blog.core.api";});}public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory){app.UseAuthentication();app.UseMvc();} }

還有一種是Ids4認(rèn)證服務(wù)自己提供的一個(gè)處理程序方案:

public class Startup {public void ConfigureServices(IServiceCollection services){services.AddMvc();services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme).AddIdentityServerAuthentication(options =>{//?identityserver根路徑options.Authority = "https://ids.neters.club";//?API資源名options.ApiName = "blog.core.api";});}public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory){app.UseAuthentication();app.UseMvc();} }

這兩個(gè)用哪一個(gè)呢,官方更建議使用下邊這個(gè),是他們自己封裝的,但是其中的核心,還是基于微軟的JWT類庫(kù)封裝的,

Ids4自己封裝的類庫(kù),給出的理由是這樣的:

  • support for both JWTs and reference tokens

  • extensible caching for reference tokens

  • unified configuration model

  • scope validation

我就簡(jiǎn)單的翻譯下,使用這種方案,可以同時(shí)支持JWT和referencetoken的兩個(gè)方案,還針對(duì)后者做了緩存,scope驗(yàn)證,統(tǒng)一配置模型等等。

而且我也在Blog.Core使用了該方案:

書寫代碼:

services.AddAuthentication(o =>{o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;o.DefaultChallengeScheme = nameof(ApiResponseHandler);o.DefaultForbidScheme = nameof(ApiResponseHandler);}).AddIdentityServerAuthentication(options =>{options.Authority = Appsettings.app(new string[] { "Startup", "IdentityServer4", "AuthorizationUrl" });options.RequireHttpsMetadata = false;options.ApiName = Appsettings.app(new string[] { "Startup", "IdentityServer4", "ApiName" });options.SupportedTokens = SupportedTokens.Jwt;options.ApiSecret = "api_secret";})

但是這里有一個(gè)情況,就是必須添加ids4自己封裝的nuget包:

<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" />

這個(gè)nuget包也在GitHub上開源了,后來官方好像也發(fā)現(xiàn)了這個(gè)情況,既然要使用微軟的,那就用吧,不用在api資源服務(wù)器里引用了,所以我們可以看這個(gè)GitHub倉(cāng)庫(kù)已經(jīng)歸檔了:

而且在下邊的README里也寫了啟用并停止更新了:

而且官方的最新文檔里也悄悄的發(fā)生了變化。

2、最新版方案AddJwtBearer

從最新的Ids4官方文檔https://docs.identityserver.io/en/latest/topics/apis.html中,也可以看出來,官方也已經(jīng)取消了上邊的那種方案,統(tǒng)一使用AddJwtBearer方法了,這里有兩個(gè)好處:

1、可以和普通的jwt認(rèn)證統(tǒng)一,因?yàn)橹笆莏wt用AddJwtBearer,ids4用的AddIdentityServerAuthentication。

2、可以取消Api資源服務(wù)中對(duì)Ids4的引入,比如那個(gè)nuget包。

所以,最終的代碼是這樣的:

// 添加Identityserver4認(rèn)證services.AddAuthentication(o =>{o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;o.DefaultChallengeScheme = nameof(ApiResponseHandler);o.DefaultForbidScheme = nameof(ApiResponseHandler);}).AddJwtBearer(options =>{options.Authority = Appsettings.app(new string[] { "Startup", "IdentityServer4", "AuthorizationUrl" });options.RequireHttpsMetadata = false;options.Audience = Appsettings.app(new string[] { "Startup", "IdentityServer4", "ApiName" });}).AddScheme<AuthenticationSchemeOptions, ApiResponseHandler>(nameof(ApiResponseHandler), o => { });

只不過這里只支持JwtTokens的模式,如果想要支持referenceTokens,需要先引用包:

<PackageReference Include="IdentityModel.AspNetCore.OAuth2Introspection" Version="4.0.1" />

然后

services.AddAuthentication("token")// JWT tokens.AddJwtBearer("token", options =>{options.Authority = Constants.Authority;options.Audience = "resource1";options.TokenValidationParameters.ValidTypes = new[] { "at+jwt" };// if token does not contain a dot, it is a reference tokenoptions.ForwardDefaultSelector = Selector.ForwardReferenceToken("introspection");})// reference tokens.AddOAuth2Introspection("introspection", options =>{options.Authority = Constants.Authority;options.ClientId = "resource1";options.ClientSecret = "secret";});

好啦,暫時(shí)就這么多吧,可能有些凌亂,具體查看項(xiàng)目代碼吧,最后還是那句話,官網(wǎng)很重要。

?



BCVP開發(fā)者社區(qū)推薦

歡迎你來

總結(jié)

以上是生活随笔為你收集整理的Ids4 认证保护 API 方案更新的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。