Identity Server 4 原理和實戰(完結)_Hybrid Flow 實例, Claims, 角色受權和策略受權


















4分50




api

創建客戶端


不須要身份認證

客戶端叫作HybirdClient


配置IdentityServer服務端,先把客戶端添加上






把userClaims添加到token裏面


而後運行服務端就能夠了服務器

客戶端配置


和以前的配置差很少,先把代碼貼上



和以前的區別多是這裏的相應類型有區別




啓動地址端口改爲 7000端口
HomeController須要處理,首先須要登錄


服務端的端口也須要改爲7000
mvc

運行測試


一運行客戶端就會跳轉到受權服務器

登錄,請求權限

成功跳轉
ide

訪問被保護資源

以前把以前的代碼所有複製到HomeController和兩個View頁面內





測試

claims



mvc的客戶端有這麼一句話


服務端把這裏設置爲true,表示把claims放到idToken裏面

運行mvc客戶端看到的結果,這些是直接從idToken裏面獲取出來的

客戶端把claims的映射的clear方法這句話註釋掉

能夠看到Claims的key是這種樣子的。這就是jwt的claimType。剛纔比較簡潔的方式是well-know的方式

複製這裏的idToken

複製到jwt.io網站解析



把那句話註釋的,客戶端的 再也不註釋

左右對比這些值

例如這些都沒有出如今咱們客戶端的Userclaims上

這是由於們咱們使用的這個中間件,默認會過濾掉認爲咱們不須要的claims。例如:nbf、exp等等
那麼怎麼防止這些東西被過濾掉
在客戶端,有個集合會把集合內的cliams給過濾掉,例如這裏咱們這裏把nbf給從集合remove掉,就不會過濾這個nbf了



須要從新登錄一下,再次運行客戶端就看到nbf這些都有了


sid和sub 設置被過濾掉

仍是在客戶端設置

這樣就被過濾掉了

網站

受權方式



之前比較流行的方式是基於角色來受權ui

基於角色的受權

角色具體在生產環境中怎麼維護先無論,這裏演示 先都寫死
這是服務端的設置,這裏是身份的認證信息

添加一個新的角色的Scope,這個scope的名字叫作roles,它裏面有個claim就是role

而後設置讓咱們的客戶端能夠訪問這個roles

而後配置客戶端,客戶只要在這裏添加一個scope就能夠了


登錄後咱們看到出現了一個scope叫作角色


客戶端,當前角色是管理員,能夠看到了,

設置客戶端的Action只能管理員訪問

默認的首頁管理和普通用戶均可以訪問


沒有映射mvc客戶端裏面的角色

先把index的橘色設置這個註釋掉,加斷點進行調試。user.IsInRole判斷用戶時候包含這個管理員的角色

當前用戶不是管理員。

看一下user的claims、確實有一個role可是這個role並無成爲咱們mvc角色系統裏面那個role。因此這裏須要某種映射

客戶端進行映射。nameClaimType和RoleClaimType分別取的是jwtClaimType裏面的類型

再次運行結果是true。看一下user的identity的Name值是正確的

而後這裏的controller就能夠設置這個角色了

沒有權限的時候訪問的是一個Account/AccessDenied這麼個路由


咱們應該作這麼個路由,當沒有權限的時候去訪問這個頁面。






修改權限被角色的訪問地址,客戶端這裏有一個選項


測試
調試

 

基於策略的受權


能夠把策略附加到action上,action也能夠有多個策略。這種比較靈活,如今這種方式用的比較多
看服務器端的用戶信息
咱們來定義FamilyName爲Smith而且lication也就是地址爲someWhere的這麼個策略


客戶端設置,首先要求,用戶必須是登錄的用戶


而後是必須包含這麼兩個Claim。
1是FamilyName是Smith
2是location的claim的值是somwhere

固然這裏也能夠設置對應多個值,這裏咱們測試先設置爲smith便可

服務端還須要設置用戶返回的信息





訪問api1資源的時候,這麼設置就會帶上這個location的claim


客戶端配置



運行

客戶端設置


修改成策略受權

再次測試只有知足策略的用戶才能訪問。
使用側錄的好處就是,直接能夠改策略的代碼不用,再修改controller這裏的代碼jwt

策略的結構


自定義Requirement



這樣這個類就寫完了。而後就是寫handler

新建類SmithInSomeWhereHandler




使用Alice用戶測試




條件沒有知足因此爲Fail

改用Bob用戶

條件都知足

能夠正常訪問


每一個Requirement能夠有多個handler,若是其中一個handler返回了成功其餘的handler都沒有返回失敗




 中間件

相關文章
相關標籤/搜索