關(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ù)中的一種。

第二階段:單點(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ù)格式。

與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ā)指南)

以微信授權(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的手段。