OAuth2協議解讀(二)

2022-08-18 21:09:09 字數 3404 閱讀 8914

目錄:

1. 簡介

在傳統的客戶端-伺服器認證模型下,客戶端利用資源擁有者的證書來通過伺服器的認證,請求受限資源。為了使得第三方應用獲取受限資源的許可權,資源擁有者與第三方應用共享證書。但是這種方式帶來下述的問題和限制:

第三方應用需要儲存資源擁有者的證書以備不時之需,通常是明文密碼。

儘管密碼驗證有它固有的弱點,但是伺服器必須支援密碼驗證。

第三方應用獲得了過度寬泛的資源擁有者所享有的資源或資源的子集的許可權,使得資源擁有者沒有足夠的能力去限制持續時間。

資源擁有者要撤銷某個第三方應用,就必須撤銷所有的第三方應用的許可權,而且要這麼做,必須改變第三方的密碼。

對於任何第三方應用的妥協都會導致使用者端密碼和所有跟此密碼相關的資源的妥協。

oauth通過引入乙個認證層並且將客戶端從資源擁有者分離出來,從而解決了上述問題。在oauth框架中,客戶端請求歸屬於資源擁有者的儲存於伺服器的資源,並且分發乙個不同的證書集合。

客戶端通過獲取乙個接入碼(乙個字串表明乙個特定的範圍,生存週期和其他的一些接入屬性)來得到受限資源的許可權,而不是通過運用使用者的證書。接入碼(access token)由乙個認證伺服器(資源擁有者授權)頒發給第三方應用,客戶端就可以通過這個接入碼來獲得資源的許可權。

例如,乙個使用者可以授權乙個列印服務獲取它的受限(儲存於乙個分享伺服器),而不用使用者提供使用者名稱和密碼。相反的,它直接向乙個分享伺服器信任的認證伺服器發起認證請求。認證通過之後,認證伺服器會向列印服務頒發證書(access token)。

1.1 角色

oauth定義了四個角色:

資源擁有者

乙個可以控制受限資源的實體。如果比作人來看待,也稱作終端使用者。

資源伺服器(資源提供者)

資源所儲存的地方,可以響應對受限資源的請求(利用access token)。

客戶端客戶端是乙個替代資源擁有者向資源伺服器請求資源的應用。術語「客戶端」不同於普通意義上的伺服器,桌面或其他裝置上的應用程式。

認證伺服器 

認證伺服器在接受客戶端發起的認證請求之後,給客戶端分發接入碼。

至於認證伺服器和資源伺服器之間的互動,則不在本文討論的範圍之內。

1.2 協議流程

a 客戶端請求資源擁有者的授權,授權的請求可以直接傳送到資源擁有者,客戶端也可以作為媒介,重定向使用者到認證伺服器。

b 客戶端收到認證授權,這個授權代表了資源擁有者對客戶端的授權。

c 客戶端向認證伺服器提供認證授權以獲取接入碼。

d 認證伺服器驗證客戶端的合法性,並且驗證客戶端提交的認證授權,如果驗證通過,則頒發驗證碼。

e 客戶端攜帶接入碼向資源伺服器請求受限資源。

f 資源伺服器驗證接入碼成功後,響應客戶端的請求。

1.3 認證授權

認證授權指的是乙個證書,是客戶端為了獲取到接入碼提供給認證伺服器的乙個憑證。一共有四種授權型別:授權碼,implicit,資源擁有者的密碼證書和客戶端證書。並且還有可以定義新型別的可擴充套件機制。

1.3.1 授權碼

授權碼是將認證伺服器作為乙個客戶端和資源擁有者之間的媒介而來。客戶端不用直接向資源擁有者請求授權,而是將資源擁有者重定向到認證伺服器,隨後又將資源擁有者定向到客戶端並且攜帶授權碼。在將資源擁有者定向到客戶端之前,認證伺服器驗證資源擁有者的合法性並獲得授權。由於認證只發生在資源擁有者和認證伺服器之間,所以客戶端不能得到使用者的證書。

認證碼只提供了很少但是很重要的幾個安全益處,例如驗證客戶端的能力,例如傳輸接入碼到客戶端卻不用經過資源擁有者的ua,也不用將接入碼暴露給資源擁有者或者其他實體。

1.3.2 隱含

隱式授權是乙個簡單的認證流程,例如用js在瀏覽器上實現這個流程。這種方式下客戶端直接傳送接入碼,而不是傳送認證碼。這種認證方式是隱式的,沒有中間媒介(如認證碼)。

隱式授權情形下,認證伺服器不能驗證客戶端的合法性。在某些情況下,客戶端的身份可以通過重定向uri來驗證,這個重定向的uri就是最初用來傳送接入碼的位址。這時接入碼可能會暴露在資源擁有者和其他應用下。

隱式授權提高了一些客戶端的響應性和效率,因為它減少了獲取接入碼過程中的往返互動。

1.3.3 資源擁有者的密碼證書

資源擁有者的證書指的就是使用者名稱和密碼,他們可以直接被用作授權碼來請求接入碼。這時的證書應該僅僅在資源擁有者和客戶端之間有很高的信任度的情況下使用,並且其他的認證型別被禁用。

即便這種認證型別下客戶端直接使用使用者的證書,這些證書也是用來單獨請求接入碼.這種授權方式可以不用儲存使用者的證書,同時也交換來了有效期更長的接入碼和重新整理碼。

1.3.4 客戶端證書

客戶端證書可以作為認證授權碼,此時的認證範圍僅僅限於資源由客戶端來控制,或者由之前的認證伺服器授權的資源。客戶端證書被作為認證授權過程,是因為客戶端作為自身(客戶端就是資源擁有者)來請求受限資源。

1.4 接入碼

接入碼是獲取受限資源的證書,它是乙個代表了客戶端認證成功的字串。這個字串對客戶端來說通常是不可見的。接入碼代表了獲取受限資源的特定範圍和持續時間。接入碼是由資源擁有者授權,資源伺服器和認證伺服器所保障的服務。

1.5 重新整理接入碼

1.6 tls版本

1.7 http重定向

1.8 協同

1.9 符號約定

2. 客戶端註冊

2.1 客戶端型別

2.2 客戶端識別符號

2.3 客戶端認證

2.3.1 客戶端密碼

2.3.2 其他認證方式

2.4 去註冊

3. 協議涉及端點

3.1 認證端點

3.1.1 響應型別

3.1.2 重定向端點

3.2 端點符號

3.2.1 客戶端認證

3.3 接入碼視角

4. 獲取認證過程

4.1 授權認證碼

4.1.1 認證請求

4.1.2 認證響應

4.1.3 接入碼請求

4.1.4 接入碼響應

4.2 隱含授權

4.2.1 認證請求

4.2.2 接入碼響應

4.3 資源擁有者的密碼證書授權

4.3.1 認證請求和響應

4.3.2 接入碼請求

4.3.3 接入碼響應

4.4 客戶端證書授權

4.4.1 認證請求和響應

4.4.2 接入碼請求

4.4.3 接入碼響應

4.5 擴充套件授權

5. 接入碼的分發

5.1 成功的響應

5.2 錯誤響應碼

6. 重新整理接入碼

7. 接入受限資源

7.1 接入碼型別

7.2 錯誤響應

8. 擴充套件性

8.1 定義接入碼型別

8.2 定義新的端點引數

8.3 定義新的認證授權型別

8.4 定義新的認證授權響應型別

8.5 定義附加的錯誤碼

9. 本地應用

10. 安全討論

11. iana討論

12. 參考

OAuth2協議簡介

例如我在qq上有很多的,分別儲存在不同的資料夾中,現在有乙個第三方登入需要訪問我的其中某乙個檔案時ru我需要怎麼做呢?如果我直接將我qq的賬號 密碼直接給第三方應用,那它就可以訪問我的全部,但是有的我是不想給他的!而且如果我只是想讓他訪問一段時間,過了這個時間之後,我就不想讓第三方訪問了,這個時候那...

OAuth2 單點登入

簡介 oauth open authorization 是乙個開放標準,允許使用者授權第三方應用訪問他們儲存在另外的服務提供者上的資訊,而不需要將使用者名稱和密碼提供給第三方應用。oauth2是oauth協議的延續版本,oauth1已經被廢棄,現在oauth2是用於授權的行業標準協議。1.四個角色 ...

OAuth2 模式介紹

1.憑證 客戶端 模式 allowedgranttypes granttypes.clientcredentials 應用場景 客戶端 服務與服務之間的互動訪問資源,token代表客戶端的請求,而不是使用者,攜帶客戶端註冊時候的貧據進行認證,獲取token,使用過程 會向token endpoint...