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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Ids4实战】分模块保护资源API

發布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Ids4实战】分模块保护资源API 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(畢竟西湖六月中)

書接上文,上回書咱們說到了IdentityServer4(下文統稱Ids4)官方已經從v3更新升級到了v4版本,我的Blog.Idp項目也做了同步更新,主要是針對快速啟動UI做的對應修改,畢竟Ids4類庫nuget包更新就是一鍵的事兒,具體的升級內容可參考:

《【Ids4實戰】最全的 v4 版本升級指南》

更新的內容涉及的比較多,主要是對一些屬性的優化,亦或者是對ASP.NetCore更兼容等等,其中我個人認為最核心也最重要的一個更新,就是新增了ApiResourceScopes表,進一步細化了對資源服務器的限制顆粒度,總結來說:

之前我們是一個客戶端只能針對一個資源服務器來操作,那該資源服務器下的所有api都會被保護,當然也都會被控制。所以是面向整個ApiResources的。

但是現在做了細化以后,一個資源服務器可以分隔出多個作用域Scope,那這樣的話,我們就可以定義多個客戶端,分模塊的去訪問同一個統一的資源服務器

比如BlogVue項目,訪問Blog相關的api;TibugNuxt項目,訪問Tibug相關的api。

這里先不要著急的抬杠這么擴展的好處和優劣點,等到自己有需要,或者自己有這樣的需求的時候就明白了,本文不做解釋,只是一把梭的講解如何配置三端,從而滿足分模塊保護資源API的目的。

本文我就用http://vueblog.neters.club項目舉例,將Blog.Core資源服務器中定義一個Blog模塊,來實現基于Scope的策略授權方案配置,主要是針對三端進行配置。

1、Blog.Idp認證中心配置

首先我們需要定義一個單獨的資源服務器作用域,然后將這些作用域配置到資源上:

// v4更新 public static IEnumerable<ApiScope> GetApiScopes() {return new ApiScope[] {new ApiScope("blog.core.api"),new ApiScope("blog.core.api.BlogModule"),}; }public static IEnumerable<ApiResource> GetApiResources() {// blog.core 項目return new List<ApiResource> {new ApiResource("blog.core.api", "Blog.Core API") {// include the following using claims in access token (in addition to subject id)//requires using using IdentityModel;UserClaims = { JwtClaimTypes.Name, JwtClaimTypes.Role,"rolename" },// v4更新Scopes={ "blog.core.api","blog.core.api.BlogModule"},ApiSecrets = new List<Secret>(){new Secret("api_secret".Sha256())},}}; }

這些基礎代碼肯定都能看的懂吧,只要你學會Ids4,肯定都明白,那對應到數據庫里,就是這樣的:

然后需要配置客戶端Client,將我們需要的Scope賦給指定的客戶端:

對應的數據庫也是很簡單:

這里給大家再啰嗦一句,要學好Ids4,數據庫表結構一定要做到了然于胸,什么數據對應什么表,什么錯誤對應什么配置,要做到心中有數。

到這里認證中心就配置完了,接下來就是客戶端了。

2、Blog.Vue配置認證連接

這個地方很簡單,和之前幾乎一模一樣,只是在scope作用域上,改一下資源的域就行:

constructor () {super({authority: 'https://ids.neters.club',client_id: 'blogvuejs',redirect_uri: 'http://localhost:6688/callback',response_type: 'id_token token',scope: 'openid profile roles blog.core.api.BlogModule',post_logout_redirect_uri: 'http://localhost:6688'})}

就是代碼中的 blog.core.api.BlogModule 這個Scope。

那就剩下最后一步了,配置資源服務器,既然使用到了作用域Scope,那就需要針對具體的作用域,配置具體的策略方案。

3、Blog.Core增加Scope策略授權

這里先說下,為了達到封裝的效果呢,我把認證和授權分開寫了,結構是這樣的:

既然我們現在是增加了作用域Scope,那就是需要一個基于Scope的策略授權方案,在授權擴展類AuthorizationSetup.cs中,添加代碼:

// 4、基于 Scope 策略授權services.AddAuthorization(options =>{// 博客模塊的策略options.AddPolicy("Scope_BlogModule_Policy", builder =>{//客戶端Scope中包含blog.core.api.BlogModule才能訪問builder.RequireScope("blog.core.api.BlogModule");});// 其他模塊的策略// ...});

我們可以根據需要添加多個模塊,每個模塊會對應一個Scope,那每個Scope又對應一個客戶端Client,這樣就實現了項目基本的授權方案,認證相關的配置不用動。

然后只需要在指定的控制器或者Action上配置權限特性就行:

到這里基本就搞定了,調試后,可以發現新生成的Token令牌也發生了變化:

可能你會說,那我已經使用了復雜的基于數據庫的策略授權,為啥還要搞這個呢?

我是這么想的,畢竟這個面向scope開發是可以在ids4可控的,細分到客戶端的,這么配置好后,就不用配置復雜的數據庫了,當然這一般都是針對前臺的展示項目,后端Admin項目肯定需要很復雜的數據庫配置更好。

今天就這么多了,自己動手試試吧。

總結

以上是生活随笔為你收集整理的【Ids4实战】分模块保护资源API的全部內容,希望文章能夠幫你解決所遇到的問題。

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