什么是IDaaS?一文帶你全面了解IDaaS!
IDaaS身份是什么?它又存在什么樣的價值?讓我們一探究竟。
在構(gòu)建數(shù)字身份平臺的過程中,產(chǎn)生了IAM(IdentityandAccessManagement),即“身份識別與訪問管理”。傳統(tǒng)IAM服務(wù)雖然解決了部分身份問題,但開發(fā)效率低,成本浪費(fèi)嚴(yán)重。我們每開發(fā)一個應(yīng)用,就要進(jìn)行一次用戶系統(tǒng)的開發(fā),并且實(shí)施復(fù)雜。
IDaaS是在IAM基礎(chǔ)上加上了云計算,基于云原生架構(gòu)、天然適應(yīng),實(shí)現(xiàn)海量數(shù)據(jù)存儲,多維度保障數(shù)據(jù)安全。
本文將從以下三方面論述IDaaS的價值:
IDaaS的發(fā)展歷程
IDaaS的五統(tǒng)能力
IDaaS背后的認(rèn)證和授權(quán)基石
一、SaaS+IAM=IDaaS1.SaaS軟件即服務(wù)軟件即服務(wù):SoftwareasaService,縮寫就是我們常說的SaaS。
即服務(wù)(aaS)通常是指由別人(一般指云服務(wù)廠商)提供的服務(wù),它可以讓個人或企業(yè)專注于自身更重要的業(yè)務(wù)。
在SaaS這種軟件交付模式下,軟件不再需要復(fù)雜的安裝部署過程,只需通過網(wǎng)絡(luò)連接就可直接使用,軟件及其數(shù)據(jù)托管在云服務(wù)廠商中,廠商將全程負(fù)責(zé)處理軟件更新、漏洞修復(fù)等維護(hù)工作。用戶通常通過Web瀏覽器或API連接就可以使用軟件。
例如騰訊云直播的SaaS方案,以及MicrosoftOffice365其實(shí)也是一種典型的針對個人用戶的SaaS應(yīng)用。
和SaaS對應(yīng)的還有另外兩種交付模式:IaaS和PaaS。
上圖的湖藍(lán)色模塊代表企業(yè)需要自行實(shí)現(xiàn)的服務(wù),而紅色模塊代表云服務(wù)廠商所提供的即用服務(wù)。
On-site,所有的一切都在用戶本地部署。
IaaS,全稱InfrastructureasaService,基礎(chǔ)設(shè)施即服務(wù)。主要提供一些基礎(chǔ)資源,包括實(shí)際的服務(wù)器、網(wǎng)絡(luò)、虛擬化和存儲。例如,我們買了個騰訊或阿里云服務(wù)器,在上面自行搭建所需環(huán)境并部署我們的軟件。
PaaS,全稱PlatformasaService,平臺即服務(wù)。主要面向開發(fā)人員,云服務(wù)廠商在提供基礎(chǔ)設(shè)施之余,還提供業(yè)務(wù)軟件的運(yùn)行環(huán)境,以集成解決方案或服務(wù)的形式將該平臺交付給用戶。例如,騰訊云的微服務(wù)平臺TSF提供了基于SpringCloud和ServiceMesh兩種微服務(wù)架構(gòu)的支持。
PaaS其實(shí)也是SaaS模式的一種應(yīng)用,但區(qū)別在于,SaaS面向的不是軟件的開發(fā)人員,而是軟件的最終用戶。
有個生動形象的PizzaasaService[2]的例子可以闡述SaaS,PaaS,IaaS三者的區(qū)別。
對應(yīng)上面,大抵意思就是:
On-site,在家自己做披薩;IaaS,買速食披薩回家自己做著吃;PaaS,叫外賣將披薩送到家里吃;SaaS,在披薩店吃披薩。2.IAM身份和訪問管理服務(wù)IAM全稱IdentityandAccessManagement,
是一種Web服務(wù),可以幫助用戶安全地控制對資源的訪問。通俗來說,就是可以使用IAM來控制誰通過了身份驗(yàn)證(準(zhǔn)許登錄)并獲得授權(quán)(擁有權(quán)限)來使用資源。詳細(xì)可以查看AWSIAM文檔[3]。
與聘請一個保安在大廈門口相似,企業(yè)的應(yīng)用程序接入IAM服務(wù)后,就可以“高枕無憂”,IAM會幫你控制誰有訪問應(yīng)用的權(quán)限。
3.IDaaS身份即服務(wù)來到本文的主角,身份即服務(wù):IdentityasaService。
Identity就是IAM中的身份概念,asaService就是開篇介紹的SaaS。
IDaaS實(shí)際上就是一個基于SaaS模式的IAM解決方案,也就是云上的身份和訪問管理服務(wù),完全由受信任的第三方云服務(wù)廠商托管和管理。它允許企業(yè)使用單點(diǎn)登錄、身份驗(yàn)證和訪問控制來提供對任意接入的已實(shí)現(xiàn)標(biāo)準(zhǔn)協(xié)議應(yīng)用的安全訪問。
根據(jù)IDaaS廠商提供的功能,某種程度下,你甚至可以認(rèn)為IDaaS就是IAM。
國內(nèi)目前了解到的IDaaS廠商有,騰訊云IDaaS[4],阿里云應(yīng)用身份服務(wù)IDaaS[5],Authing[6]。在云計算、云原生領(lǐng)域,很多時候想要了解一個產(chǎn)品,其實(shí)可以去上述三家企業(yè)官網(wǎng)看看,多參考參考他們的現(xiàn)成方案。點(diǎn)擊查看Authing開發(fā)者文檔
二、IDaaS的五統(tǒng)能力IDaaS的功能可以合稱為5A能力[7]:Account、Authentication、Authorization、Application、Audit。
但我愿稱其為五統(tǒng)能力:
1.統(tǒng)一賬號管理Account模塊的管理,這塊容易理解。你想最基本的一塊,應(yīng)用程序要想實(shí)現(xiàn)單點(diǎn)登陸的話,
單點(diǎn)登錄(SingleSignOn),簡稱為SSO,是比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一。SSO的定義是在多個應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。
A系統(tǒng)使用了user1登錄成功后,B系統(tǒng)隨之也以user1的身份登錄成功了。例如淘寶taobao.com和天貓tmall.com兩個站點(diǎn)。
那其賬號是不是必須得統(tǒng)一放在一處(IDaaS)進(jìn)行會話管理。
不過通常由于業(yè)務(wù)需要,應(yīng)用系統(tǒng)和IDaaS還得做一次賬號同步(SCIM/LDAP方式)。
2.統(tǒng)一身份認(rèn)證身份認(rèn)證叫做Authentication。更形象化就是指你在應(yīng)用上通過輸入賬號密碼、驗(yàn)證碼或掃碼等方式進(jìn)行登錄的這個過程。
而這個過程IDaaS所使用的認(rèn)證協(xié)議會幫你做了,而且把登錄頁面都給做了,直接喂到你嘴里,你應(yīng)用只需要重定向過來即可。
身份認(rèn)證協(xié)議有很多種:OIDC/SAML等。下文我會再著重講述OIDC協(xié)議。
3.統(tǒng)一授權(quán)管理Authorization是授權(quán),切忌別和認(rèn)證Authentication混淆。
授權(quán)是指客戶端經(jīng)過身份認(rèn)證成功后,能夠以有限的權(quán)限去訪問服務(wù)端資源的一種機(jī)制。
IDaaS的授權(quán)架構(gòu)一般會選用基于角色的權(quán)限訪問控制(RBAC)。
常用的授權(quán)模式的話有基于OAuth2.0框架的授權(quán)碼模式,這部分我也會在下文的OIDC章節(jié)重點(diǎn)講訴。
4.統(tǒng)一應(yīng)用管理Application應(yīng)用包括企業(yè)接入進(jìn)來的自身應(yīng)用以及IDaaS所提供的一些可選模板應(yīng)用(如GitLab、Grafana等)。
IDaaS自身提供統(tǒng)一標(biāo)準(zhǔn)規(guī)范,對應(yīng)用統(tǒng)一管理,例如可以控制應(yīng)用是否支持單點(diǎn)登錄,控制應(yīng)用的可訪問成員等。
5.統(tǒng)一審計管理Audit審計,沒什么好講的,業(yè)務(wù)角度,代碼埋點(diǎn),Webhook等方式記錄下應(yīng)用和用戶相關(guān)的操作日志,便于管理員分析系統(tǒng)的日常操作與安全事件數(shù)據(jù)。
三、OIDC身份認(rèn)證協(xié)議接下來將進(jìn)入本文核心內(nèi)容,講述IDaaS背后支撐著認(rèn)證和授權(quán)能力的基石:OAuth2.0和OIDC協(xié)議。
1.OAuth2.0OAuth即OpenAuthorization,開放授權(quán)。
OAuth2.0(RFC6749[8])是一個授權(quán)標(biāo)準(zhǔn)協(xié)議,可以使第三方應(yīng)用獲得對資源服務(wù)的有限訪問。
根據(jù)OAuth2.0協(xié)議規(guī)范,定義了四個角色:
資源所有者(ResourceOwner):能夠授予對受保護(hù)資源訪問權(quán)限的實(shí)體。例如應(yīng)用的用戶是資源的所有者,可以授權(quán)其他人訪問他的資源。當(dāng)資源所有者是一個人時,它被稱為最終用戶。
資源服務(wù)器(ResourceServer):存儲受保護(hù)資源的服務(wù)器,能夠接受并使用訪問令牌來響應(yīng)受保護(hù)的資源請求。就是資源服務(wù)器接受AccessToken,然后驗(yàn)證它擁有的權(quán)限,最后返回對應(yīng)的資源。這個資源服務(wù)器一般是應(yīng)用本身。
授權(quán)服務(wù)器(AuthorisationServer):服務(wù)器向客戶端(即應(yīng)用)頒發(fā)訪問令牌來驗(yàn)證資源所有者并獲得授權(quán)。即負(fù)責(zé)頒發(fā)AccessToken的服務(wù)器,例如IDaaS就是一個授權(quán)服務(wù)器。
客戶端(Client):需要獲取訪問令牌以訪問資源服務(wù)器的應(yīng)用。經(jīng)過授權(quán)后,授權(quán)服務(wù)器為客戶端頒發(fā)AccessToken。后續(xù)客戶端可以攜帶這個AccessToken到資源服務(wù)器那訪問用戶的資源。
在OAuth2.0中一個應(yīng)用可能既是ResourceServer,也是Client,具體是什么角色,取決于應(yīng)用工作的場景。
概念可能有點(diǎn)難嚼,還請慢咽。
這四個角色一直在圍繞著一個叫AccessToken的東西在轉(zhuǎn)圈圈。
AccessToken也就是訪問令牌,它用于允許應(yīng)用訪問一個資源API。用戶認(rèn)證授權(quán)成功后,授權(quán)服務(wù)器會簽發(fā)AccessToken給應(yīng)用。應(yīng)用后續(xù)需要攜帶AccessToken訪問資源API,資源服務(wù)API會檢驗(yàn)AccessToken是否有權(quán)限訪問,從而決定是否返回對應(yīng)資源。
而AccessToken本質(zhì)上只是一串隨機(jī)字符串,并不能從中獲取到任何信息,檢驗(yàn)AccessToken的步驟還需要資源服務(wù)器將它轉(zhuǎn)發(fā)到授權(quán)服務(wù)器上進(jìn)行解析驗(yàn)證。
了解完AccessToken之后,我們來關(guān)注一下客戶端調(diào)用方是如何獲取到它的,也就是授權(quán)模式的選擇。
授權(quán)碼模式(AuthorizationCode):適用于具有完整前后端的傳統(tǒng)Web應(yīng)用以及移動或桌面端應(yīng)用。
隱式模式(Implicit):適用于沒有后端的基于瀏覽器(JavaScript)的純前端應(yīng)用。
密碼模式(ResourceOwnerPasswordCredentials):適用于資源服務(wù)器和客戶端之間高度信任的情況下,例如自家應(yīng)用使用自家的資源。
客戶端憑證模式(ClientCredentials):適用于沒有前端參與,純后端交互的情況,期間沒有用戶的參與,客戶端自己就是資源所有者。......
我們重點(diǎn)關(guān)注授權(quán)碼模式和客戶端憑證模式,這兩個是最常用的。
先看授權(quán)碼模式,也叫code換token模式,我們以StackOverflow使用GitHub登錄為例(在這個過程中StackOverflow是客戶端,GitHub是資源服務(wù)器,提供郵箱頭像等資源信息,同時GitHub也是授權(quán)服務(wù)器,會頒發(fā)token給客戶端)。
第一步,點(diǎn)擊登錄后需要跳轉(zhuǎn)到授權(quán)服務(wù)器地址,即GitHub的地址,并且必須在URL上攜帶client_id和redirect_uri以及scope等信息。
client_id可以讓GitHub知道是哪個客戶端在請求資源,這里的01b478c0264a1fbd7183就是StackOverflow在GitHub中注冊的客戶端ID;
redirect_uri是授權(quán)成功或失敗后的回調(diào)地址;
response_type=code表示使用授權(quán)碼模式授權(quán);
scope表示應(yīng)用正在請求哪些權(quán)限;
state是一個隨機(jī)字符串用來防止CSRF攻擊。
繼續(xù)第二步,當(dāng)我們點(diǎn)擊授權(quán)按鈕后,這時授權(quán)服務(wù)器即GitHub會將瀏覽器重定向到第一步的redirect_uri參數(shù)指定的網(wǎng)址。并且跳轉(zhuǎn)時,會攜帶一個授權(quán)碼code參數(shù)(由GitHub后臺生成的)以及state參數(shù)。
第三步,由于瀏覽器觸發(fā)請求了redirect_uri,所以StackOverflow網(wǎng)站后臺可以接收到請求并拿到授權(quán)碼code和state,這時就可以將state和第一步生成的state對比以防止CSRF和其他相關(guān)攻擊。
第四步,StackOverflow可以拿著client_id、client_secret、code跟GitHub交換令牌,GitHub收到請求以后就會校驗(yàn)code并頒發(fā)訪問令牌(code是有過期時間的,并且是一次性的)。
Ruby//RequestPOSTcode=1efc47a278d10a04f88e&client_id=01b478c0264a1fbd7183&client_secret=xxxxxx//ResponseAccept:application/json{"access_token":"gho_16C7e42F292c6912E7710c838347Ae178B4a","scope":"user:email","token_type":"bearer"}最后第五步,StackOverflow使用GitHub頒發(fā)的訪問令牌跟GitHub獲取到所需的資源(用戶郵箱地址),然后就走自己的業(yè)務(wù)流程了,一般就是重定向回首頁。
完整的流程可以看GitHub的CreatinganOAuthAppDocs[9]。
另一個客戶端憑證模式就相對簡單了,畢竟只是純后端交互。
例如,一個B應(yīng)用擁有很多photo資源,即B為資源服務(wù)器(假設(shè)同時也是授權(quán)服務(wù)器),A客戶端想要獲取B的photo資源。
第一步,A應(yīng)用直接使用client_id和client_secret向B申請資源。
Groovyhttps://b.com/oauth/token?grant_type=client_credentials&scope=photo&client_id=xxx&client_secret=xxxresponse_type=client_credentials表示使用客戶端憑證模式授權(quán)。
第二步,B作為授權(quán)服務(wù)器驗(yàn)證A客戶端的client_id和client_secret是否合法,然后頒發(fā)訪問令牌。
第三步,A客戶端攜帶訪問令牌向B資源服務(wù)器獲取photo資源。
這期間并沒有用戶的參與,A客戶端自己就相當(dāng)于一個“用戶”。
2.OpenIDConnect講完OAuth2.0授權(quán),來到OIDC認(rèn)證協(xié)議。
如標(biāo)題,OIDC全稱是OpenIDConnect[10],
是一個基于OAuth2.0的認(rèn)證+授權(quán)(OAuth2.0提供的能力)協(xié)議。
OIDC可以理解為OAuth2.0的超集,在OAuth2.0之上實(shí)現(xiàn)了更多的標(biāo)準(zhǔn),例如定義了一系列的EndPoint。還有一些規(guī)范諸如SessionManagement[11],F(xiàn)ront-ChannelLogout[12],Back-ChannelLogout[13]等。
OIDC之所以有認(rèn)證的功能,是因?yàn)樵贠Auth2.0頒發(fā)AccessToken的基礎(chǔ)上,多頒發(fā)了一個IDToken(用戶的身份憑證),和AccessToken是一個隨機(jī)字符串不同的是,IDToken是一個JWTToken。
IDToken自身包含了一些用戶的基本信息,而且由于JWT的防篡改性,讓客戶端不需要再向授權(quán)服務(wù)器進(jìn)行身份驗(yàn)證,就能直接用IDToken來進(jìn)行身份驗(yàn)證。即使IDToken包含的用戶信息不夠,也可以調(diào)用OIDC定義的UserInfoEndPoint(用戶信息接口)來獲取更多的用戶信息。
OIDC協(xié)議定義的名詞和OAuth2.0協(xié)議定義的稍微有些出入:
OpenIDProvider,簡稱OP:相當(dāng)于OAuth2.0中的授權(quán)服務(wù)器,除了負(fù)責(zé)頒發(fā)AccessToken,還會頒發(fā)IDToken。例如IDaaS就是一個OP。
RelyingParty,簡稱RP:代指OAuth2.0中的客戶端。
EndUser,簡稱EU:即用戶。
最后,OIDC的授權(quán)流程與OAuth2.0是一樣的,主要區(qū)別在于OIDC授權(quán)流程中會額外返回IDToken。
IDaaS的認(rèn)證和授權(quán)使用了OIDC/OAuth2.0。說白了,要搭建IDaaS得先搭建一個授權(quán)服務(wù)器OpenIDProvider(更多時候稱之為OIDCProvider)。
但即便完全了解OIDC協(xié)議,自行實(shí)現(xiàn)一套完整的OIDCProvider依舊十分繁瑣,好在云原生環(huán)境下孕育出了很多優(yōu)秀的項目。本文會簡單介紹一下Go語言生態(tài)下的dexidp/dex和ory/hydra,感興趣的可以自行到其官網(wǎng)詳細(xì)了解。
1.dexidp/dexDex[14]作為CNCF的一個sandbox項目,是一個具有可插拔連接器的OIDC和OAuth2.0提供商。
它通過”連接器“的身份來充當(dāng)其他身份提供商的門戶,可以將身份驗(yàn)證推送到LDAP服務(wù)器、SAML提供商或GitHub、Google和ActiveDirectory等其他一些成熟的身份提供商中進(jìn)行驗(yàn)證。客戶端只需寫一次認(rèn)證邏輯就可以與Dex對接,然后Dex來處理特定后端的協(xié)議。
ORYHydra[15]是一個OAuth2.0和OpenIDConnect提供者。
特別一說的是Hydra所實(shí)現(xiàn)的OAuth2.0協(xié)議并不依賴Go標(biāo)準(zhǔn)庫提供的,而是自實(shí)現(xiàn)的fosite[16]。
另外ORYHydra還提供了一個5分鐘的快速搭建教程。
身份行業(yè)正全面朝著現(xiàn)代化身份標(biāo)準(zhǔn)發(fā)展,零信任的網(wǎng)絡(luò)安全模型、基于區(qū)塊鏈技術(shù)的去中心化身份認(rèn)證、基于物聯(lián)網(wǎng)(IoT)的身份認(rèn)證、隱私及法規(guī)問題的解決方案等都是目前身份行業(yè)所面臨的挑戰(zhàn)和趨勢。
IDaaS作為現(xiàn)代身份之稱,正是為了支持當(dāng)前和未來的變化才誕生的。借助IDaaS,可以輕松地連接到您的組織,為您提供創(chuàng)新未來。
而Authing正是這樣一個優(yōu)秀的IDaaS提供商。作為國內(nèi)首款以開發(fā)者為中心的全場景身份云產(chǎn)品,集成了所有主流身份認(rèn)證協(xié)議,為企業(yè)和開發(fā)者提供完善安全的用戶認(rèn)證和訪問管理服務(wù)。
主要功能包括:單點(diǎn)登錄、用戶分析、掃碼登錄、多因素認(rèn)證、行為審計、風(fēng)險控制、跨平臺設(shè)備管理、IoT身份認(rèn)證等;兼容國際各類標(biāo)準(zhǔn)協(xié)議:OAuth2.0、OIDC、SAML、AD/LDAP、WS-Fed、JWT等;此外還有基于函數(shù)計算可以無限制拓展Authing能力的Pipeline。支持云交付和私有化部署方式,幫助企業(yè)和開發(fā)者千倍級提升生產(chǎn)效率。
不管是ToB、ToE的企業(yè)場景,還是ToC的終端用戶場景,Authing都可以:大幅降低運(yùn)營成本,提升內(nèi)部管理效率;提升用戶體驗(yàn),提升用戶運(yùn)營能力。
參考資料
[1]交付模式對比圖:https://www.redhat.com/zh/topics/cloud-computing/what-is-saas
[2]PizzaasaService:https://m.oursky.com/saas-paas-and-iaas-explained-in-one-graphic-d56c3e6f4606
[3]AWSIAM文檔:https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/introduction.html
[4]騰訊云IDaaS:https://cloud.tencent.com/product/tcid
[5]阿里云應(yīng)用身份服務(wù)IDaaS:https://www.aliyun.com/product/idaas
[6]Authing:https://www.authing.cn/
[7]5A能力:https://help.aliyun.com/document_detail/167902.html
[8]RFC6749:https://datatracker.ietf.org/doc/html/rfc6749
[9]CreatinganOAuthAppDocs:https://docs.github.com/en/developers/apps/building-oauth-apps/creating-an-oauth-app
[10]OpenIDConnect:https://openid.net/specs/openid-connect-core-1_0.html
[11]SessionManagement:https://openid.net/specs/openid-connect-session-1_0.html
[12]Front-ChannelLogout:https://openid.net/specs/openid-connect-frontchannel-1_0.html
[13]Back-ChannelLogout:https://openid.net/specs/openid-connect-backchannel-1_0.html
[14]Dex:https://dexidp.io/
[15]ORYHydra:https://www.ory.sh/hydra/docs/next/
[16]fosite:https://github.com/ory/fosite
相關(guān)評說:
定海區(qū)離心: ______ 主人公身上散發(fā)人性的光輝,在環(huán)境如此惡劣的情況下,能堅持不懈,對于自己的追求和理想都勇于付諸實(shí)踐,始終抱著樂觀積極的態(tài)度去生活,當(dāng)遇到時,我們應(yīng)...
定海區(qū)離心: ______ 把X片,X圖統(tǒng)統(tǒng)銷毀.這是最直接的.相當(dāng)一部分SY就是X片和X圖勾起來的.至于其他.還是靠你自己...以下是我曾經(jīng)回答另一個SY者的文...
定海區(qū)離心: ______ 丈夫應(yīng)保持健壯的身體婦女在受孕前的3~12個月,丈夫應(yīng)保持健壯的身體.1 精神愉快2 加強(qiáng)營養(yǎng).3 適當(dāng)減少性生活,使精囊中貯存更多的高質(zhì)量精蟲.4 避免接觸殺蟲劑、二氧化碳以及鎘、...
定海區(qū)離心: ______ 猶太人是原指猶大支派(以色列人12支派之一)或猶大王國(以色列國分裂后與北方10支派所成立的以色列王國對立)的人民.全體猶太人本來統(tǒng)稱希伯來人,自進(jìn)占巴勒斯坦起至舉族被擄往巴比倫為止,又...
定海區(qū)離心: ______ 你個這個分?jǐn)?shù)大概會是比2本線多出15分的樣子,浙江今年沒有分2,3批,直接并在一起了所以你要沖刺的話,可以考慮去...
定海區(qū)離心: ______ during的中文意思:在 ... 期間;在…的時候. 讀音:英 ['dj??r??] 美 ['d?r??] 相關(guān)短語: 1、during fabrication 在制造期間 2、during college 上大學(xué)期間 3、During recovery 在課間追打 4、During activities 活動期間 常見句型: 1、The ...
定海區(qū)離心: ______ xiao dong used to be a ''problem child'' .but he is not the same as he was. He did n...
定海區(qū)離心: ______ 大家好! 進(jìn)入學(xué)校學(xué)習(xí)快有3個月了,老師的教導(dǎo),同學(xué)的友愛,伴我們一路走來.成長的道路上留下了我們串串腳印,深深淺淺,點(diǎn)...