談?wù)勀銓?duì)OAuth的理解,這道題你會(huì)了嗎?
1位工作5年的小伙伴被問(wèn)到這樣一道面試題,說(shuō)談?wù)勀銓?duì)OAuth的理解。當(dāng)時(shí),這位小伙伴感覺(jué)回答得不是很理想,希望我拍一期視頻詳細(xì)地介紹一下。
今天,我給大家講一講,我對(duì)這個(gè)問(wèn)題的理解。
1、什么是 OAuth
OAuth是一個(gè)關(guān)于授權(quán)(Authorization)的開(kāi)放技術(shù)標(biāo)準(zhǔn),在全世界得到廣泛應(yīng)用,它本質(zhì)上是一種協(xié)議,可以在不共享用戶用戶名和密碼的前提下,實(shí)現(xiàn)將授權(quán)從應(yīng)用程序另一個(gè)應(yīng)用程序。如圖所示:
咱們可以使用QQ或者微信直接登錄京東APP,而無(wú)需在京東重新注冊(cè)用戶。相當(dāng)于,用戶可以在一個(gè)平臺(tái)上登錄,獲得授權(quán)后,也可在另一平臺(tái)上執(zhí)行操作和查看數(shù)據(jù)。使用最為廣泛的場(chǎng)景是SSO(單點(diǎn)登錄)。
舉個(gè)例子,有一位訪客需要在房主不在家時(shí)進(jìn)到房間里面,房主又不能把門鎖密碼告訴訪客,而是給預(yù)先發(fā)給訪客一張臨時(shí)房卡,這張房卡刷一次就失效了。OAuth 的工作方式和這個(gè)場(chǎng)景非常類似,一個(gè)應(yīng)用程序向另一個(gè)應(yīng)用發(fā)送授權(quán)令牌來(lái)授予用戶訪問(wèn)權(quán)限,而不是發(fā)送用戶的密碼。
2、OAuth的工作原理
我們知道,任何的身份認(rèn)證,本質(zhì)上都是基于對(duì)請(qǐng)求方的不信任產(chǎn)生的。而OAuth的出現(xiàn),主要是解決多個(gè)應(yīng)用之間的授權(quán)信任問(wèn)題。在OAuth的交互過(guò)程中有四個(gè)參與角色,如圖所示:
它們分別是:
- 資源所有者(Resource Owner):一般是指咱們自己。
- 客戶端(Client):一般是指需要授權(quán)的應(yīng)用,比如京東APP。
- 資源服務(wù)器(Resource Server):一般是指保存信息的服務(wù)器,比如QQ密碼和微信密碼的服務(wù)器。
- 授權(quán)服務(wù)器(Authorization Server):一般是指提API的服務(wù)器,比如QQ的Open API服務(wù),微信的Open API服務(wù)。
一般情況下,資源服務(wù)器和認(rèn)證服務(wù)器是同一個(gè)服務(wù),這樣更方便調(diào)用。OAuth的工作原理如圖所示:
第1步:客戶端向資源擁有者發(fā)送授權(quán)請(qǐng)求,一般資源擁有者的資源會(huì)存放在資源服務(wù)器。
第2步:客戶端會(huì)收到資源服務(wù)器的授權(quán)許可。
第3步:客戶端拿到許可之后,再向授權(quán)服務(wù)器發(fā)送一次驗(yàn)證,給客戶端頒發(fā)一個(gè)Access Token訪問(wèn)令牌。
第4步:客戶端拿到令牌之后,交給資源服務(wù)器。
第5步:資源服務(wù)器會(huì)將獲取到的令牌傳給認(rèn)證服務(wù)器驗(yàn)證令牌的有效性。
第6步:資源服務(wù)器驗(yàn)證令牌通過(guò)之后,就會(huì)返回一個(gè)受保護(hù)的資源。
在我們看到的這個(gè)流程中,最重要的是第2步,也就是在第3步獲取授權(quán)之前,客戶端要先申請(qǐng)?jiān)S可資源的內(nèi)容,比如用戶頭像,用戶昵稱等等。也就是客戶端向資源服務(wù)器申請(qǐng)授權(quán)的時(shí)候,需要填寫以下授權(quán)所需的信息,分別是:應(yīng)用名稱、應(yīng)用網(wǎng)站、重定向URI或者回調(diào)的URL(redirect_uri)、客戶端標(biāo)識(shí)client_id和客戶端密鑰client_secret。這些信息需要我們?cè)?。
當(dāng)然,OAuth一共設(shè)計(jì)了四種授權(quán)模式,分別是:
授權(quán)碼模式(Authorization Code Grant)。
簡(jiǎn)化模式(Implicit Grant)。
密碼模式(Resource Owner Password Credentials Grant)。
客戶端模式(Client Credentials Grant)。
由于視頻時(shí)長(zhǎng)的限制,我這里就不詳細(xì)介紹了。有興趣的小伙伴可以在評(píng)論區(qū)回復(fù)666,我可以單獨(dú)再拍攝一期視頻專門講解。
3、關(guān)于OAuth 2.0
OAuth 2.0 是 OAuth 的最新版本。OAuth 的首版于 2010 年發(fā)布。OAuth 2.0 于 2012 年發(fā)布,修復(fù)了 OAuth 1.0 中存在的若干漏洞。目前,大家基本上都只會(huì)使用OAuth2.0了。
好了,以上就是我對(duì)OAuth的理解。