OAuth(開(kāi)放授權(quán))是一個(gè)開(kāi)放標(biāo)準(zhǔn),允許用戶(hù)讓第三方網(wǎng)站訪(fǎng)問(wèn)該用戶(hù)在某一網(wǎng)站上存儲(chǔ)的私密的資源(如照片,視頻,聯(lián)系人列表),而無(wú)需將用戶(hù)名和密碼提供給第三方網(wǎng)站。
OAuth允許用戶(hù)提供一個(gè)令牌,而不是用戶(hù)名和密碼來(lái)訪(fǎng)問(wèn)他們存放在特定服務(wù)提供者的數(shù)據(jù)。每一個(gè)令牌授權(quán)一個(gè)特定的網(wǎng)站(例如,視頻編輯網(wǎng)站)在特定的時(shí)段(例如,接下來(lái)的2小時(shí)內(nèi))內(nèi)訪(fǎng)問(wèn)特定的資源(例如僅僅是某一相冊(cè)中的視頻)。這樣,OAuth允許用戶(hù)授權(quán)第三方網(wǎng)站訪(fǎng)問(wèn)他們存儲(chǔ)在另外的服務(wù)提供者上的信息,而不需要分享他們的訪(fǎng)問(wèn)許可或他們數(shù)據(jù)的所有內(nèi)容。
OAuth是OpenID的一個(gè)補(bǔ)充,但是完全不同的服務(wù)。
認(rèn)證和授權(quán)過(guò)程
在認(rèn)證和授權(quán)的過(guò)程中涉及的三方包括:
- 服務(wù)提供方,用戶(hù)使用服務(wù)提供方來(lái)存儲(chǔ)受保護(hù)的資源,如照片,視頻,聯(lián)系人列表。
- 用戶(hù),存放在服務(wù)提供方的受保護(hù)的資源的擁有者。
- 客戶(hù)端,要訪(fǎng)問(wèn)服務(wù)提供方資源的第三方應(yīng)用,通常是網(wǎng)站,如提供照片打印服務(wù)的網(wǎng)站。在認(rèn)證過(guò)程之前,客戶(hù)端要向服務(wù)提供者申請(qǐng)客戶(hù)端標(biāo)識(shí)。
使用OAuth進(jìn)行認(rèn)證和授權(quán)的過(guò)程如下所示:
- 用戶(hù)訪(fǎng)問(wèn)客戶(hù)端的網(wǎng)站,想操作用戶(hù)存放在服務(wù)提供方的資源。
- 客戶(hù)端向服務(wù)提供方請(qǐng)求一個(gè)臨時(shí)令牌。
- 服務(wù)提供方驗(yàn)證客戶(hù)端的身份后,授予一個(gè)臨時(shí)令牌。
- 客戶(hù)端獲得臨時(shí)令牌后,將用戶(hù)引導(dǎo)至服務(wù)提供方的授權(quán)頁(yè)面請(qǐng)求用戶(hù)授權(quán)。在這個(gè)過(guò)程中將臨時(shí)令牌和客戶(hù)端的回調(diào)連接發(fā)送給服務(wù)提供方。
- 用戶(hù)在服務(wù)提供方的網(wǎng)頁(yè)上輸入用戶(hù)名和密碼,然后授權(quán)該客戶(hù)端訪(fǎng)問(wèn)所請(qǐng)求的資源。
- 授權(quán)成功后,服務(wù)提供方引導(dǎo)用戶(hù)返回客戶(hù)端的網(wǎng)頁(yè)。
- 客戶(hù)端根據(jù)臨時(shí)令牌從服務(wù)提供方那里獲取訪(fǎng)問(wèn)令牌。
- 服務(wù)提供方根據(jù)臨時(shí)令牌和用戶(hù)的授權(quán)情況授予客戶(hù)端訪(fǎng)問(wèn)令牌。
- 客戶(hù)端使用獲取的訪(fǎng)問(wèn)令牌訪(fǎng)問(wèn)存放在服務(wù)提供方上的受保護(hù)的資源。
歷史
OAuth開(kāi)始于2006年11月,當(dāng)時(shí)布萊恩·庫(kù)克(Blaine Cook)正在開(kāi)發(fā)Twitter的OpenID實(shí)現(xiàn)。與此同時(shí),Ma.gnolia需要一個(gè)解決方案允許使用OpenID的成員授權(quán)Dashboard訪(fǎng)問(wèn)他們的服務(wù)。這樣庫(kù)克、克里斯·梅西納(Chris Messina)和來(lái)自Ma.gnolia的拉里·哈爾夫(Larry Halff)與戴維·雷科爾頓(David Recordon)會(huì)面討論在Twitter和Ma.gnolia API上使用OpenID進(jìn)行委托授權(quán)。 他們討論得出沒(méi)有開(kāi)發(fā)標(biāo)準(zhǔn)完成API訪(fǎng)問(wèn)的委托。
2007年4月,成立了OAuth討論組,這個(gè)由實(shí)現(xiàn)者組成的小組撰寫(xiě)了一個(gè)開(kāi)放協(xié)議的提議草案。來(lái)自Google的德維特·克林頓(DeWitt Clinton)獲悉OAuth項(xiàng)目后,表示他有興趣支持這個(gè)工作。2007年7月,團(tuán)隊(duì)起草了最初的規(guī)范。隨后,Eran Hammer-Lahav加入團(tuán)隊(duì)并協(xié)調(diào)了許多OAuth的稿件,創(chuàng)建了更為正式的規(guī)范。2007年10月3日, OAuth核心 1.0最后的草案發(fā)布了。
2008年11月,在明尼阿波利斯舉行的互聯(lián)網(wǎng)工程任務(wù)組第73次會(huì)議上, 舉行了OAuth的BoF[1]討論將該協(xié)議納入IETF做進(jìn)一步的規(guī)范化工作。 這個(gè)會(huì)議參加的人很多,關(guān)于正式地授權(quán)在IETF設(shè)立一個(gè)OAuth工作組這一議題得到了廣泛的支持。
2010年4月,OAuth 1.0協(xié)議發(fā)表為RFC 5849,一個(gè)非正式RFC。
OAuth 2.0
OAuth 2.0是OAuth協(xié)議的下一版本,但不向后兼容OAuth 1.0。 OAuth 2.0關(guān)注客戶(hù)端開(kāi)發(fā)者的簡(jiǎn)易性,同時(shí)為Web應(yīng)用,桌面應(yīng)用和手機(jī),和起居室設(shè)備提供專(zhuān)門(mén)的認(rèn)證流程。規(guī)范還在IETF OAuth工作組的開(kāi)發(fā)中[2] ,按照Eran Hammer-Lahav的說(shuō)法,OAuth將于2010年末完成[3]。
Facebook的新的Graph API只支持OAuth 2.0[4],Google在2011年3月亦宣布Google API對(duì)OAuth 2.0的支援[5]。
安全
2009年4月23日,OAuth宣告了一個(gè)1.0協(xié)議的安全漏洞。該漏洞影響了OAuth 1.0核心規(guī)范第6節(jié)的OAuth的認(rèn)證流程(也稱(chēng)作3階段OAuth) [6] 于是,發(fā)布了OAuth Core協(xié)議1.0a版本來(lái)解決這一問(wèn)題。[7]
參見(jiàn)
參考文獻(xiàn)
外部鏈接