您好,登錄后才能下訂單哦!
小編給大家分享一下Ids4中分模塊保護資源API怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
書接上文,上回書咱們說到了IdentityServer4(下文統稱Ids4)官方已經從v3更新升級到了v4版本,我的Blog.Idp項目也做了同步更新,主要是針對快速啟動UI做的對應修改,畢竟Ids4類庫nuget包更新就是一鍵的事兒
更新的內容涉及的比較多,主要是對一些屬性的優化,亦或者是對ASP.NetCore更兼容等等,其中我個人認為最核心也最重要的一個更新,就是新增了ApiResourceScopes表,進一步細化了對資源服務器的限制顆粒度,總結來說:
之前我們是一個客戶端只能針對一個資源服務器來操作,那該資源服務器下的所有api都會被保護,當然也都會被控制。所以是面向整個ApiResources的。
但是現在做了細化以后,一個資源服務器可以分隔出多個作用域Scope,那這樣的話,我們就可以定義多個客戶端,分模塊的去訪問同一個統一的資源服務器。
比如BlogVue項目,訪問Blog相關的api;TibugNuxt項目,訪問Tibug相關的api。
這里先不要著急的抬杠這么擴展的好處和優劣點,等到自己有需要,或者自己有這樣的需求的時候就明白了,本文不做解釋,只是一把梭的講解如何配置三端,從而滿足分模塊保護資源API的目的。
本文我就用http://vueblog.neters.club項目舉例,將Blog.Core資源服務器中定義一個Blog模塊,來實現基于Scope的策略授權方案配置,主要是針對三端進行配置。
首先我們需要定義一個單獨的資源服務器作用域,然后將這些作用域配置到資源上:
// 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,數據庫表結構一定要做到了然于胸,什么數據對應什么表,什么錯誤對應什么配置,要做到心中有數。
到這里認證中心就配置完了,接下來就是客戶端了。
這個地方很簡單,和之前幾乎一模一樣,只是在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,那就需要針對具體的作用域,配置具體的策略方案。
這里先說下,為了達到封裝的效果呢,我把認證和授權分開寫了,結構是這樣的:
既然我們現在是增加了作用域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怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。