【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認證中心配置
首先我們需要定義一個單獨的資源服務器作用域,然后將這些作用域配置到資源上:
這些基礎代碼肯定都能看的懂吧,只要你學會Ids4,肯定都明白,那對應到數據庫里,就是這樣的:
然后需要配置客戶端Client,將我們需要的Scope賦給指定的客戶端:
對應的數據庫也是很簡單:
這里給大家再啰嗦一句,要學好Ids4,數據庫表結構一定要做到了然于胸,什么數據對應什么表,什么錯誤對應什么配置,要做到心中有數。
到這里認證中心就配置完了,接下來就是客戶端了。
2、Blog.Vue配置認證連接
這個地方很簡單,和之前幾乎一模一樣,只是在scope作用域上,改一下資源的域就行:
就是代碼中的 blog.core.api.BlogModule 這個Scope。
那就剩下最后一步了,配置資源服務器,既然使用到了作用域Scope,那就需要針對具體的作用域,配置具體的策略方案。
3、Blog.Core增加Scope策略授權
這里先說下,為了達到封裝的效果呢,我把認證和授權分開寫了,結構是這樣的:
既然我們現在是增加了作用域Scope,那就是需要一個基于Scope的策略授權方案,在授權擴展類AuthorizationSetup.cs中,添加代碼:
我們可以根據需要添加多個模塊,每個模塊會對應一個Scope,那每個Scope又對應一個客戶端Client,這樣就實現了項目基本的授權方案,認證相關的配置不用動。
然后只需要在指定的控制器或者Action上配置權限特性就行:
到這里基本就搞定了,調試后,可以發現新生成的Token令牌也發生了變化:
可能你會說,那我已經使用了復雜的基于數據庫的策略授權,為啥還要搞這個呢?
我是這么想的,畢竟這個面向scope開發是可以在ids4可控的,細分到客戶端的,這么配置好后,就不用配置復雜的數據庫了,當然這一般都是針對前臺的展示項目,后端Admin項目肯定需要很復雜的數據庫配置更好。
今天就這么多了,自己動手試試吧。
總結
以上是生活随笔為你收集整理的【Ids4实战】分模块保护资源API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebBenchmark之动态数据测试
- 下一篇: 数据结构与算法专题——第九题 鸡尾酒排序