首頁 >每日程式設計 >PHP知識 >OAuth2.0協議的介紹以及PHP接入

OAuth2.0協議的介紹以及PHP接入

安安杰尼
安安杰尼原創
2020-05-15 18:05:52528瀏覽

OAuth2.0的簡介

OAuth(Open Authorization,即開放授權)是一個無需告知第三方使用者的帳號以及密碼的情況下,授權使用者資訊給第三方的一個安全,開放的標準協議。更多關於協議的介紹,讀者可以參考RFC 6749 。

下面開始簡單的說明下該協定下最為經典的Authorization Code模式,介紹如下圖:

OAuth2.0協議的介紹以及PHP接入

我們說明下,上方流程中一共有四個角色。

  1. ResourceOwner為資源擁有者,就是我們的使用者自己

  2. User-Agent就是我們存取應用程式的瀏覽器

  3. Client為第三方服務

  4. AuthorizationServer為認證伺服器,可以理解為使用者資源的提供者。

那麼呼叫的流程則是:

  1. 使用者本身透過瀏覽器存取Client第三方的服務,Client透過建構OAuth2連結(參數包括目前第三方服務的身份ID,以及重定向URI),將使用者引導至認證伺服器的授權頁

  2. 此時使用者在瀏覽器上選擇是否同意授權

  3. 若使用者同意授權,則認證伺服器將使用者重定向到第一步指定的重定向URI,同時附上一個授權碼Code

  4. ##第三方服務收到授權碼,帶上授權碼來源的重定向URI,向認證伺服器申請憑證。

  5. 認證伺服器檢查授權碼和重定向URI的有效性,透過後頒發AccessToken(呼叫憑證)

d和e都是在服務端執行的,不需要透過瀏覽器

OAuth2的設計


OAuth2.0協議的介紹以及PHP接入

一、授權登入連結的建構

首先在使用者存取一個應用程式時,前端呼叫服務端的接口,服務端偵測到使用者未登錄,此時建構一個授權連結。

$redirect_uri = 'https://test.xx.ccom/index';
$this->goUrl('https://auth.xx.com/connect/oauth2/authorize?appid=xxx&redirect_uri='.$redirect_uri);

將該連結回傳給前端,前端直接跳到該連結。然後

https://auth.xx.com/connect/oauth2/authorize

對顯示一個是否同意授權的頁面,使用者透過點擊授權,此時認證伺服器將直接重定向到redirect_uri並且攜帶一個Code參數。當服務端再接收到這個code參數時,透過這個參數前往認證伺服器取得access_token。


$code = $_GET['code'];
$res = file_get_contents('.$code );
$access_token = $res['access_token'];

然後服務端再透過這個access_token到認證伺服器換取使用者資訊。

$res = file_get_contents('https://auth.xx.com/user_info?token='.$access_token );
$uid = $res['uid'];
$name = $res['name'];

快取方案建議

透過此協定取得到了使用者可以做一定的緩存,避免認證伺服器壓力過大。


  1. 第三方可以設計一定的cookie原則,用來儲存使用者資訊避免一直要求認證伺服器。

  2. #

以上是OAuth2.0協議的介紹以及PHP接入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn