概述
AOneID是天翼云AOne產品系列中的IDaaS(身份即服務,Identifier as a Service)創新成果,目標是打造一個強大且基于IDaaS理念的身份管理系統,
它能夠無縫鏈接企業成員與應用程序,使得員工只需單一身份,就能安全高效地訪問所有企業應用。在AOneId中,用戶可以通過預配置的認證選項和
便捷的應用集成功能,輕松搭(da)建(jian)自(zi)定義的用戶管理體系。
作為標準的IDaaS解決方案,向應用程序提供權限管理是其核心功能之一。然而,由于可能需要針對客戶的特定應用進行定制開發,這常常使人感到挑
戰(zhan)重重。本文意在揭示(shi)這一既神(shen)秘又(you)強大的(de)功能模塊(kuai),逐步揭開它的(de)面紗(sha)。
相關概念
在開(kai)始(shi)之前,我們先問一(yi)個問題:
什么是權限?
這個問題在不(bu)同的(de)場(chang)景下,有很多種(zhong)表述,如果(guo)你去問KIMI“權限的(de)定義”時(shi),會(hui)得到這樣的(de)回答(da):
權限(Permission)在不同的(de)上下文中有著不同的(de)定義,但通常它指的(de)是在計算(suan)機科(ke)學(xue)、網絡安(an)全和組織(zhi)管理中,對(dui)特(te)定資源的(de)訪問和操作的(de)授(shou)權
簡單來講,就是
是(shi)否禁止或允許(xu)某人對某種(zhong)(zhong)資源進行某種(zhong)(zhong)操作
經過技(ji)術化建模,我們可以得到(dao)一些技(ji)術概念(nian)。
效果
效(xiao)果(guo)(Effect)指的是(shi)(shi)是(shi)(shi)否(fou)允(yun)許(Allow)或者禁止(Deny),如果(guo)是(shi)(shi)允(yun)許,則表明(ming)具備權限(xian)(xian),如果(guo)是(shi)(shi)禁止,表明(ming)不具備權限(xian)(xian)。
動作和資源
所(suo)謂動作(Action)指的是(shi)(shi)上面所(suo)說的“某(mou)種操作”,資源(Resource)指的是(shi)(shi)上面所(suo)說的“某(mou)種資源”,之所(suo)以在這里(li)并(bing)列提起,是(shi)(shi)因為動作和資源的分界
并非很(hen)嚴格,需要(yao)根(gen)據具體的場景(jing)來(lai)做規劃。
案例1
例如(ru)(ru),在(zai)API權(quan)限(xian)場景,我們可(ke)以(yi)把Http方(fang)法(Method)作為Action來編(bian)碼,把接口(kou)路徑作為資源來編(bian)碼。假(jia)設(she)我們現在(zai)有(you)一個API接口(kou),權(quan)限(xian)可(ke)以(yi)設(she)計(ji)如(ru)(ru)下:
| Action | Resource | 說明 |
|---|---|---|
| GET | /org/{orgId} | 獲取指定機構的信息 |
| PUT | /org/{orgId} | 全量更新指定機構的屬性 |
| DELETE | /org/{orgId} | 刪除指定的機構 |
| PATCH | /org/{orgId} | 更新指定機構的某個屬性 |
案例2
例如,在工(gong)具(ju)欄場景,我們可以(yi)把接口路徑來做為(wei)Action,把操作對象作為(wei)Resource,權限設計可以(yi)如下:
| Action | Resource | 說明 |
|---|---|---|
| /org/get | {orgId} | 獲取指定機構的信息 |
| /org/update | {orgId} | 全量更新指定機構的屬性 |
| /org/delete | {orgId} | 刪除指定的機構 |
| /org/patch | {orgId} | 更新指定機構的某個屬性 |
授權實體
授權實體(ti)(Entity)指的是(shi)(shi)上面所說“某(mou)(mou)人(ren)”及其擴展或分組(zu)。例(li)如“某(mou)(mou)人(ren)”不一定是(shi)(shi)用戶(hu)(hu),也可以(yi)是(shi)(shi)應用,“某(mou)(mou)人(ren)”不一定是(shi)(shi)某(mou)(mou)個具體(ti)用戶(hu)(hu),而是(shi)(shi)一個群體(ti)(機構、用戶(hu)(hu)組(zu)等)。
用戶
用(yong)戶是授(shou)權實(shi)體的(de)一種(zhong),指的(de)是具(ju)體的(de)用(yong)戶。
應用
應用(yong)是授權實體的(de)(de)一種(zhong),指(zhi)的(de)(de)是平(ping)臺上的(de)(de)應用(yong),屬于“某人”概念上的(de)(de)擴展(zhan)。
用戶組
用戶組(zu)是(shi)授權(quan)實體的(de)一(yi)種(zhong),指的(de)是(shi)一(yi)組(zu)用戶,屬于“某人”概(gai)念的(de)分組(zu)。
機構
機(ji)(ji)構(gou)是授權實體的(de)一種,屬于(yu)“某(mou)人”概念的(de)分(fen)組。和用戶(hu)組不同的(de)是,機(ji)(ji)構(gou)是樹(shu)形結構(gou)的(de)分(fen)組,父機(ji)(ji)構(gou)的(de)授權需要自動(dong)擴(kuo)展到子機(ji)(ji)構(gou)。
權限策略
權(quan)限策(ce)略(Policy)定義了(le)一些列的權(quan)限規(gui)(gui)則(ze),這些規(gui)(gui)則(ze)為(wei)最(zui)終的權(quan)限校驗提供了(le)依據(ju)。每條策(ce)略都明確(que)表達了(le)一條規(gui)(gui)則(ze):
是否禁止或允(yun)許某(mou)(mou)人對某(mou)(mou)種資源進行某(mou)(mou)種操(cao)作(zuo)
在AoneID中(zhong),權(quan)限策略表達(da)如下:
| 屬性 | 說明 |
|---|---|
| entity_type | 授權實體類型,包括:角色(role),用戶(user),用戶組(team),機構(org) |
| entity_id | 授權實體的ID,根據實體類型不同而表達不同含義,例如如果entity_type為user,則表示為用戶id |
| action_expr | 動作表達式,支持*通配符 |
| resource_expr | 資源表達式,支持*通配符 |
| eff_date | 生效時間 |
| exp_date | 失效時間 |
| effect | 效果 |
從上述的表達中,可以看出三點(dian):
1、在(zai)策略中,并(bing)不需要枚舉所有(you)(you)的動作和資源(yuan),而(er)是可(ke)以使用(yong)通配符來匹配資源(yuan),例如/org/*可(ke)以代表(biao)所有(you)(you)以/org/為(wei)前綴的接口路徑;
2、策(ce)略(lve)是有有效期的,可以進行(xing)臨(lin)時(shi)授權;
3、可以(yi)直(zhi)接指定授權(quan)對象進行直(zhi)接授權(quan),也可以(yi)通過角色(se)(role)進行間接授權(quan);
在實際的權(quan)限校驗中,一(yi)次判斷會(hui)匹配(pei)出多條(tiao)策(ce)略(lve)(lve),這些策(ce)略(lve)(lve)往(wang)往(wang)是(shi)相互(hu)沖突,相互(hu)覆(fu)蓋的,這一(yi)點(dian)在后面進行討(tao)論
角色
角(jiao)色(se)是權(quan)限策略(lve)的組(zu)合,一個角(jiao)色(se)可以包含多條策略(lve),同時(shi),也可以將角(jiao)色(se)授權(quan)給(gei)多個授權(quan)對象(用戶(hu),用戶(hu)組(zu),機(ji)構,應用等(deng)),這種授權(quan)可以稱為間接授權(quan)。
間接授權在實(shi)操中更(geng)有(you)效率,但沒(mei)有(you)直(zhi)接授權靈活,兩者可以(yi)搭(da)配靈活使用。
令人遺(yi)憾(han)的是,AOneID當前版(ban)本(ben)雖然模型上(shang)支(zhi)持直接(jie)授權,但在界面上(shang)并不支(zhi)持直接(jie)授權
權限空間
上面的概念只是RBAC的基本思(si)想,對于所有(you)人都不是很陌生。
RBAC(Role-Based Access Control,基于角(jiao)色的(de)訪(fang)問控制)是(shi)一(yi)種(zhong)廣(guang)泛使(shi)用(yong)的(de)訪(fang)問控制策略(lve),它通過角(jiao)色來分(fen)配(pei)權限(xian),而不是(shi)直(zhi)接將權限(xian)分(fen)配(pei)給單個用(yong)戶。
RBAC的(de)核(he)心思想是用戶通過成為適當角色(se)的(de)成員來獲得對資源的(de)訪(fang)問權(quan)限。這種模型簡化了權(quan)限管理(li),提高了安全性(xing),并使得權(quan)限分配更加靈活。
但是這些對于IDaaS來說,是否夠了呢?
IDaaS一(yi)大核(he)心功能是(shi)應(ying)用集(ji)成,對(dui)于IDaaS來說(shuo),應(ying)用集(ji)成中的身份認證(單點(dian)登錄)只是(shi)基(ji)本訴求,它更希望的是(shi)為(wei)應(ying)用來提供(gong)權(quan)限服務(wu),那么問題來了,應(ying)用A來了,
對它的動作(zuo)(zuo)和(he)資(zi)源(yuan)表達(da)成方(fang)(fang)案A,應用B來了(le),對它的動作(zuo)(zuo)和(he)資(zi)源(yuan)表達(da)成方(fang)(fang)案B,那(nei)么(me)很(hen)容(rong)易造成代碼和(he)表達(da)式上的沖突。
針(zhen)對這個問題,AOneID引入了(le)“權限(xian)空(kong)間(jian)”的概(gai)念,所(suo)謂權限(xian)空(kong)間(jian),是一(yi)種用于管理和(he)隔離權限(xian)資源(yuan)的機制。權限(xian)分組允(yun)許開發者將資源(yuan)、角色(se)和(he)權限(xian)授(shou)權統(tong)一(yi)組合在(zai)一(yi)起,
以適應(ying)復雜的組(zu)織架構和業(ye)務(wu)場景(jing)。
權限空(kong)(kong)間(jian)對動(dong)作、資源、策(ce)略(lve)、角色進行(xing)了(le)隔離,應用A根(gen)據(ju)他自己的(de)業務(wu)特點(dian),規劃(hua)了(le)空(kong)(kong)間(jian)A,應用B根(gen)據(ju)自己的(de)業務(wu)特點(dian),規劃(hua)了(le)空(kong)(kong)間(jian)B,有效的(de)避(bi)免了(le)兩(liang)者的(de)沖(chong)突。