關(guān)于鑒權(quán)和授權(quán)戴差,之前寫過不少文章:
但是优床,聊到的點都比較散,沒有系統(tǒng)歸納到底這些年處理登錄是如何演變的所禀?于是,才有了這篇歷史版
背景知識1:什么是鑒權(quán)與授權(quán)?
- 鑒權(quán) Authentication割去,指對于一個聲明者所聲明的身份權(quán)利脸爱,對其所聲明的真實性進行鑒別確認的過程遇汞。
例子:用戶名張三,密碼******簿废,用戶名和密碼通過挖財驗證空入,登陸成功 - 授權(quán) Authorization,一般是指獲取用戶的委派權(quán)限族檬。
例子:我是張三歪赢,有權(quán)訪問git/client/jizhang,因為gitlab給我進行了授權(quán)
可見单料,先有鑒權(quán)埋凯,才有授權(quán)。而登錄扫尖,其實就是鑒權(quán)的過程白对。但是,現(xiàn)在的登錄服務换怖,同時做了鑒權(quán)和授權(quán)的工作甩恼,所以,用戶是感知不到這兩個階段的明顯區(qū)別。
背景知識2:登錄的痛點在哪里条摸?
- 場景1: 如果一個企業(yè)有非常多的內(nèi)部系統(tǒng)悦污,且每個系統(tǒng)都需要單獨注冊,登錄钉蒲,那么塞关,員工維護那么多賬號密碼,估計要瘋掉的子巾。
- 場景2:非常多的小型Web應用帆赢,沒有能力或者不想做自己的登錄系統(tǒng),那么线梗,是否可以用一些公開椰于,通用的登錄服務呢?
所有痛點都指向一個問題:需要一個三方平臺仪搔,可以提供統(tǒng)一登錄能力(包括鑒權(quán)與授權(quán))
下面瘾婿,讓我們看下歷史是如何演進的。
第一階段:LDAP
LDAP協(xié)議(Lightweight Directory Access Protocol烤咧,輕型目錄訪問協(xié)議)偏陪,是基于IP協(xié)議上的。
特點:
- 規(guī)范了數(shù)據(jù)存儲方式(賬號密碼煮嫌,組織結(jié)構(gòu)等信息)笛谦,以及驗證賬號密碼的過程。
- 只負責對賬號密碼進行驗證昌阿,也就是說饥脑,只做鑒權(quán),不做授權(quán)懦冰。
- 除了驗證賬號密碼這個額外的功能外灶轰,看上去更像一個數(shù)據(jù)庫,只負責數(shù)據(jù)存儲和讀取刷钢。
為了這種數(shù)據(jù)和數(shù)據(jù)之間互相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)而設(shè)計的東西笋颤,有個特殊的名字叫:目錄服務(Directory service)。LDAP是目錄服務中的一種内地。
第二階段:單點登錄(single sign-on伴澄,SSO)- SAML協(xié)議
萬維網(wǎng)興起之后,網(wǎng)站的登錄訴求噴涌而出(PC Web時代)瓤鼻,這時秉版,而每個站點針對不同用戶,又可能有不同的授權(quán)機制茬祷。比如論壇系統(tǒng)清焕,系統(tǒng)管理員,管理員,用戶秸妥,游客滚停,他們可訪問的菜單權(quán)限,數(shù)據(jù)權(quán)限粥惧,都是不同的键畴。
于是,授權(quán)必不可少突雪。
SSO出現(xiàn)的初衷起惕,是為了提供一個全球統(tǒng)一的用戶身份服務,達到一次登錄就可以訪問其它網(wǎng)站的理想咏删。
在2001年由OASIS組織安全服務技術(shù)委員會推出了SAML(安全主張標記語言惹想,Security Assertion Markup Language,以XML為基礎(chǔ))督函,提出了對SSO實現(xiàn)的整體技術(shù)和安全規(guī)范嘀粱。
SAML協(xié)議里,約定了參與SSO的三方:瀏覽器辰狡,身份提供者(IDP)锋叨,服務提供者(SP),以及這三方相互的通訊次序宛篇,加密方法娃磺,傳輸數(shù)據(jù)格式。
與LDAP不同些己,SAML協(xié)議登錄過程豌鸡,非常依賴瀏覽器重定向功能嘿般,而LDAP協(xié)議都是應用與LDAP服務間的直接通訊段标。
第三階段:去中心化的OpenID
說簡單點,OpenID的目的就是建立一個統(tǒng)一的SSO的方式炉奴,而不用在意IDP服務的提供方逼庞。
用戶可以使用自己的IDP服務,或者選擇一個可信任的IDP服務提供方瞻赶,在這個IDP服務上完成注冊赛糟。那么只要SP站點能使用OpenID的方式,用戶就可以完成登錄了砸逊。
第四階段:OAuth2
Android璧南,ios等智能手機興起,移動時代來臨师逸。此時司倚,強依賴瀏覽器重定向的SAML協(xié)議就顯得不太合時宜了,于是OAuth2出現(xiàn),更好的支持SSO登錄动知。
OAuth 2.0是一個關(guān)于授權(quán)(authorization)的開放網(wǎng)絡(luò)標準皿伺,特點為:
- IDP與SP需要明確的知道對方,所以在授權(quán)流程開始之前盒粮, SP需要在IDP服務注冊鸵鸥,通過審核,拿到特定公鑰丹皱,這就是注冊過程妒穴。
- IDP被進一步細分。在SP與服務提供者之間摊崭,設(shè)置了一個授權(quán)層宰翅,SP不能直接登錄服務提供者却特,只能登錄授權(quán)層霎冯,授權(quán)完成之后室谚,才能通過令牌獲取資源(大部分情況下柴淘,下面兩個服務的提供商為同一個):
- 資源服務器(Resource Server) - 存放用戶資源和信息
- 授權(quán)服務器(Authorization Server) - 給三方頒發(fā)授權(quán)令牌(access token)
- 不強依賴瀏覽器重定向疑苔,可支持移動場景(參考移動應用微信登錄開發(fā)指南)
以微信授權(quán)登錄為例蛇数,"應用程序"是三方應用松捉,"授權(quán)服務器"和“資源服務器”都是微信栅屏。
小結(jié)
所以啸箫,回答自己之前的那個問題耸彪,SSO和OAuth 2.0是什么關(guān)系?
答案:無論是OAuth 2.0忘苛,還是SAML協(xié)議蝉娜,OpenID等,都是為了實現(xiàn)SSO的手段扎唾。