登錄(鑒權(quán)與授權(quán))歷史演進(jìn)版

關(guān)于鑒權(quán)和授權(quán),之前寫過不少文章:

但是,聊到的點(diǎn)都比較散,沒有系統(tǒng)歸納到底這些年處理登錄是如何演變的?于是,才有了這篇歷史版

背景知識1:什么是鑒權(quán)與授權(quán)?

  • 鑒權(quán) Authentication,指對于一個(gè)聲明者所聲明的身份權(quán)利,對其所聲明的真實(shí)性進(jìn)行鑒別確認(rèn)的過程。
    例子:用戶名張三,密碼******,用戶名和密碼通過挖財(cái)驗(yàn)證,登陸成功
  • 授權(quán) Authorization,一般是指獲取用戶的委派權(quán)限。
    例子:我是張三,有權(quán)訪問git/client/jizhang,因?yàn)間itlab給我進(jìn)行了授權(quán)

可見,先有鑒權(quán),才有授權(quán)。而登錄,其實(shí)就是鑒權(quán)的過程。但是,現(xiàn)在的登錄服務(wù),同時(shí)做了鑒權(quán)和授權(quán)的工作,所以,用戶是感知不到這兩個(gè)階段的明顯區(qū)別。

背景知識2:登錄的痛點(diǎn)在哪里?

  • 場景1: 如果一個(gè)企業(yè)有非常多的內(nèi)部系統(tǒng),且每個(gè)系統(tǒng)都需要單獨(dú)注冊,登錄,那么,員工維護(hù)那么多賬號密碼,估計(jì)要瘋掉的。
  • 場景2:非常多的小型Web應(yīng)用,沒有能力或者不想做自己的登錄系統(tǒng),那么,是否可以用一些公開,通用的登錄服務(wù)呢?

所有痛點(diǎn)都指向一個(gè)問題:需要一個(gè)三方平臺,可以提供統(tǒng)一登錄能力(包括鑒權(quán)與授權(quán))

下面,讓我們看下歷史是如何演進(jìn)的。

第一階段:LDAP

LDAP協(xié)議(Lightweight Directory Access Protocol,輕型目錄訪問協(xié)議),是基于IP協(xié)議上的。

特點(diǎn):

  • 規(guī)范了數(shù)據(jù)存儲方式(賬號密碼,組織結(jié)構(gòu)等信息),以及驗(yàn)證賬號密碼的過程。
  • 只負(fù)責(zé)對賬號密碼進(jìn)行驗(yàn)證,也就是說,只做鑒權(quán),不做授權(quán)。
  • 除了驗(yàn)證賬號密碼這個(gè)額外的功能外,看上去更像一個(gè)數(shù)據(jù)庫,只負(fù)責(zé)數(shù)據(jù)存儲和讀取。

為了這種數(shù)據(jù)和數(shù)據(jù)之間互相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)而設(shè)計(jì)的東西,有個(gè)特殊的名字叫:目錄服務(wù)(Directory service)。LDAP是目錄服務(wù)中的一種。

image.png

第二階段:單點(diǎn)登錄(single sign-on,SSO)- SAML協(xié)議

萬維網(wǎng)興起之后,網(wǎng)站的登錄訴求噴涌而出(PC Web時(shí)代),這時(shí),而每個(gè)站點(diǎn)針對不同用戶,又可能有不同的授權(quán)機(jī)制。比如論壇系統(tǒng),系統(tǒng)管理員,管理員,用戶,游客,他們可訪問的菜單權(quán)限,數(shù)據(jù)權(quán)限,都是不同的。

于是,授權(quán)必不可少。

SSO出現(xiàn)的初衷,是為了提供一個(gè)全球統(tǒng)一的用戶身份服務(wù),達(dá)到一次登錄就可以訪問其它網(wǎng)站的理想。

在2001年由OASIS組織安全服務(wù)技術(shù)委員會推出了SAML(安全主張標(biāo)記語言,Security Assertion Markup Language,以XML為基礎(chǔ)),提出了對SSO實(shí)現(xiàn)的整體技術(shù)和安全規(guī)范。

SAML協(xié)議里,約定了參與SSO的三方:瀏覽器,身份提供者(IDP),服務(wù)提供者(SP),以及這三方相互的通訊次序,加密方法,傳輸數(shù)據(jù)格式。

image.png

與LDAP不同,SAML協(xié)議登錄過程,非常依賴瀏覽器重定向功能,而LDAP協(xié)議都是應(yīng)用與LDAP服務(wù)間的直接通訊。

第三階段:去中心化的OpenID

說簡單點(diǎn),OpenID的目的就是建立一個(gè)統(tǒng)一的SSO的方式,而不用在意IDP服務(wù)的提供方。

用戶可以使用自己的IDP服務(wù),或者選擇一個(gè)可信任的IDP服務(wù)提供方,在這個(gè)IDP服務(wù)上完成注冊。那么只要SP站點(diǎn)能使用OpenID的方式,用戶就可以完成登錄了。

第四階段:OAuth2

Android,ios等智能手機(jī)興起,移動時(shí)代來臨。此時(shí),強(qiáng)依賴瀏覽器重定向的SAML協(xié)議就顯得不太合時(shí)宜了,于是OAuth2出現(xiàn),更好的支持SSO登錄。

OAuth 2.0是一個(gè)關(guān)于授權(quán)(authorization)的開放網(wǎng)絡(luò)標(biāo)準(zhǔn),特點(diǎn)為:

  • IDP與SP需要明確的知道對方,所以在授權(quán)流程開始之前, SP需要在IDP服務(wù)注冊,通過審核,拿到特定公鑰,這就是注冊過程。
  • IDP被進(jìn)一步細(xì)分。在SP與服務(wù)提供者之間,設(shè)置了一個(gè)授權(quán)層,SP不能直接登錄服務(wù)提供者,只能登錄授權(quán)層,授權(quán)完成之后,才能通過令牌獲取資源(大部分情況下,下面兩個(gè)服務(wù)的提供商為同一個(gè)):
    • 資源服務(wù)器(Resource Server) - 存放用戶資源和信息
    • 授權(quán)服務(wù)器(Authorization Server) - 給三方頒發(fā)授權(quán)令牌(access token)
  • 不強(qiáng)依賴瀏覽器重定向,可支持移動場景(參考移動應(yīng)用微信登錄開發(fā)指南
OAuth authentication flow.png

以微信授權(quán)登錄為例,"應(yīng)用程序"是三方應(yīng)用,"授權(quán)服務(wù)器"和“資源服務(wù)器”都是微信。

小結(jié)

所以,回答自己之前的那個(gè)問題,SSO和OAuth 2.0是什么關(guān)系?
答案:無論是OAuth 2.0,還是SAML協(xié)議,OpenID等,都是為了實(shí)現(xiàn)SSO的手段。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容