中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

OAuth 2.0 理解

2018-07-20    來源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬Linux鏡像隨意使用

OAuth 是一個(gè)用于定于授權(quán)的開放標(biāo)準(zhǔn),目前已經(jīng)發(fā)展到了 2.0 的版本。它可以讓用戶允許第三方應(yīng)用程序訪問該用戶存儲(chǔ)在某一個(gè)網(wǎng)站或者系統(tǒng)上面的資源(比如照片,聯(lián)系人)而不用提供密碼給該第三方應(yīng)用程序,并且還可以限制權(quán)限和有效期。OAuth 做到了一下這兩點(diǎn):

  • 不需要將用戶名和密碼提供給第三方應(yīng)用而是通過令牌讓第三方應(yīng)用訪問資源

  • 每一個(gè)令牌授權(quán)一個(gè)特定的應(yīng)用在特定的時(shí)段內(nèi)訪問特定的資源

應(yīng)用場(chǎng)景

OAuth 的應(yīng)用場(chǎng)景遍布互聯(lián)網(wǎng)應(yīng)用的方方面面,最典型的就是微博。比如我們?cè)陂_發(fā)一個(gè)第三方的微博客戶端(下文簡(jiǎn)稱為:客戶端),需要可以登錄用戶并且操作用戶的一系列微博信息。最簡(jiǎn)單的辦法就是把微博賬號(hào)密碼告訴這個(gè)客戶端,但是這樣就會(huì)存在一系列的問題:

  • 客戶端為了后續(xù)的服務(wù),會(huì)保存用戶的密碼,這樣不安全

  • 客戶端擁有了客戶微博的權(quán)力,用戶沒法限制授權(quán)的范圍和有效期

  • 用戶只有修改密碼,才能收回權(quán)限,但是這樣會(huì)使得其他的第三方應(yīng)用程序失效

除了這些還會(huì)導(dǎo)致只要有一個(gè)第三方應(yīng)用程序被破解,就會(huì)導(dǎo)致用戶密碼泄漏,以及所有被密碼保護(hù)的數(shù)據(jù)泄漏。而且 OAuth 就是來解決這個(gè)問題的。

理解 OAuth

在理解 OAuth 之前,需要說明幾個(gè)名詞:

  • Client:第三方應(yīng)用程序,就是本文中的客戶端

  • Resource owner : 資源所有者,本文中稱為"yonghu"。

  • Authorization server :認(rèn)證服務(wù)器,服務(wù)提供商專門用來處理認(rèn)證的服務(wù)器

  • Resource server:資源服務(wù)器,服務(wù)提供商存放用戶生成的資源的服務(wù)器,它和認(rèn)證服務(wù)器,可以是同一臺(tái)服務(wù)器,也可以是不同的服務(wù)器。

來看看流程圖:

整個(gè)授權(quán)流程按照順序分為六個(gè)步驟:

  • 用戶打開客戶端以后,客戶端要求用戶給予授權(quán)

  • 用戶同意授權(quán)

  • 客戶端使用上一步獲得的授權(quán),向認(rèn)證服務(wù)器申請(qǐng)令牌

  • 認(rèn)證服務(wù)器對(duì)客戶端進(jìn)行認(rèn)證以后,確認(rèn)無誤并且發(fā)放令牌

  • 客戶端使用令牌向資源服務(wù)器申請(qǐng)獲取資源

  • 資源服務(wù)器確認(rèn)令牌無誤同意向客戶端開放資源

授權(quán)模式

OAuth 2.0 總共定義了 4 中授權(quán)模式,分別是以下四種:

  • 授權(quán)碼模式

  • 簡(jiǎn)化模式

  • 密碼模式

  • 客戶端模式

 

授權(quán)碼模式

其中授權(quán)碼模式是功能最完整,流程最嚴(yán)密的授權(quán)模式。授權(quán)流程圖:

首先用戶打開客戶端應(yīng)用,這時(shí)候客戶端要求進(jìn)行授權(quán)并且會(huì)跳轉(zhuǎn)到授權(quán)頁(yè)面:

我們可以看到跳轉(zhuǎn)到的授權(quán) URL 是這樣的:

  • https://api.weibo.com/oauth2/authorize :認(rèn)證服務(wù)器

  • client_id :客戶端的 client id,用于給認(rèn)證服務(wù)器識(shí)別該客戶端

  • redirect_uri :獲得授權(quán)碼之后,認(rèn)證服務(wù)器重定向用戶代理(比如瀏覽器)的地址

  • response_type : 表明授權(quán)類型,默認(rèn)是 code,即授權(quán)碼模式

  • state:表示客戶端的當(dāng)前狀態(tài),可以指定任意值,認(rèn)證服務(wù)器會(huì)原封不動(dòng)地返回這個(gè)值,用于抵御 CSRF 攻擊

這時(shí)候用戶同意進(jìn)行授權(quán),認(rèn)證服務(wù)器將用戶跳轉(zhuǎn)到客戶端事先指定的 redirect_uri, 同時(shí)附上一個(gè)授權(quán)碼

客戶端收到授權(quán)碼,附上之前的 redirect_uri 向認(rèn)證服務(wù)器申請(qǐng)令牌,這一步是在客戶端的后臺(tái)服務(wù)器上完成的,對(duì)用戶不可見。比如:

  • https://api.weibo.com/v1/oauth2/authorize :獲取 access_token 的服務(wù)器地址

  • client id :client id 用于驗(yàn)證應(yīng)用程序。

  • client secret:client secret 用于驗(yàn)證應(yīng)用程序。

  • grant_type :剛剛獲得的授權(quán)碼

  • redirect_uri :重定向URI,和第一步一致

認(rèn)證服務(wù)器確認(rèn)無誤后,向客戶端發(fā)送訪問令牌和更新令牌:

這個(gè)返回的包括了以下這些,有些還有包含一個(gè)權(quán)限范圍 scope,這里不撰述:

  • access_token:訪問令牌

  • token_type :令牌類型

  • expires_in :過期時(shí)間,單位為秒

  • refresh_token: 更新令牌,用來獲取下一次的訪問令牌

 

簡(jiǎn)化模式

簡(jiǎn)化模式不通過第三方應(yīng)用程序的服務(wù)器,直接在瀏覽器中向認(rèn)證服務(wù)器申請(qǐng)令牌,跳過了授權(quán)碼這個(gè)步驟,所有步驟在瀏覽器中完成,令牌對(duì)訪問者是可見的,且客戶端不需要認(rèn)證。這種模式一般是用于手機(jī)應(yīng)用,桌面客戶端應(yīng)用程序和運(yùn)行于瀏覽器上的 Web 應(yīng)用程序, 授權(quán)令牌會(huì)交給用戶代理,再由用戶代理交給應(yīng)用程序。如下圖:

  • 首先用戶訪問客戶端,客戶端將用戶導(dǎo)向認(rèn)證服務(wù)器, 并且用戶選擇同意授權(quán):

  • 認(rèn)證服務(wù)器將用重定向客戶端事先指定的 URI,并且在 URI 的 hash 部分包含了訪問令牌:

  • 瀏覽器向資源服務(wù)器發(fā)出請(qǐng)求,其中不包括上一步收到的 hash 值

  • 資源服務(wù)器返回一個(gè)網(wǎng)頁(yè),其中包含的代碼可以獲取 hash 值中的令牌

  • 瀏覽器執(zhí)行上一步獲得的腳本并且取出令牌

  • 瀏覽器將令牌發(fā)送給客戶端

 

密碼模式

用戶向客戶端提供用戶名密碼,客戶端使用這些信息,向 服務(wù)商提供商 索要授權(quán)。在這種模式下,客戶端不得存儲(chǔ)密碼。 這通常用在用戶對(duì)客戶端高度可信的情況下 , 一般認(rèn)證服務(wù)器只有在其他授權(quán)模式無法執(zhí)行的情況下,并且客戶端是由某一個(gè)著名公司出品才能考慮使用這種模式。如下圖:

  • 用戶向客戶端提供用戶名和密碼

  • 客戶端將用戶名和密碼發(fā)給認(rèn)證服務(wù)器,向后者請(qǐng)求令牌

  • 認(rèn)證服務(wù)器確認(rèn)無誤后,向客戶端提供訪問令牌

 

客戶端模式

客戶端使用自己的名義而不是用戶的名義,向服務(wù)提供商進(jìn)行認(rèn)證。在這種模式下,用戶直接向客戶端注冊(cè),客戶端以自己的名義要求服務(wù)提供商提供服務(wù),其實(shí)并不存在授權(quán)。如下圖:

對(duì)于這種方式,用在訪問一些和用戶無關(guān)的公共接口,比如一些首頁(yè)數(shù)據(jù),這些數(shù)據(jù)和用戶無關(guān),但是又不想任何人都可以調(diào)用這個(gè) Api,那么就可以采用這種模式。

刷新令牌

認(rèn)證服務(wù)器頒發(fā)的令牌是有有效期限制的,所以客戶端需要自行去刷新令牌。如果用戶訪問的時(shí)候,客戶端的訪問令牌已經(jīng)過期,則需要使用更新令牌申請(qǐng)一個(gè)新的訪問令牌?蛻舳送ㄟ^一個(gè)POST 請(qǐng)求并且攜帶上參數(shù):

  • granttype:表示使用的授權(quán)模式,此處的值固定為 refreshtoken,必選

  • refresh_token:表示早前收到的更新令牌,必選

  • scope:表示申請(qǐng)的授權(quán)范圍,不可以超出上一次申請(qǐng)的范圍,如果省略該參數(shù),則表示與上一次一致

 

來自:http://mp.weixin.qq.com/s/hzy8gV0eDdumg0TD5mi5cA

 

標(biāo)簽: 安全 代碼 服務(wù)器 服務(wù)器地址 服務(wù)商 互聯(lián)網(wǎng) 腳本 權(quán)限

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:Python實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)常見算法

下一篇:函數(shù)式編程中的 “函數(shù)們”