OAuth(Open Authorization,即開放授權)是一個無需告知第三方使用者的帳號以及密碼的情況下,授權使用者資訊給第三方的一個安全,開放的標準協議。更多關於協議的介紹,讀者可以參考RFC 6749 。
下面開始簡單的說明下該協定下最為經典的Authorization Code模式,介紹如下圖:
我們說明下,上方流程中一共有四個角色。
ResourceOwner為資源擁有者,就是我們的使用者自己
User-Agent就是我們存取應用程式的瀏覽器
Client為第三方服務
AuthorizationServer為認證伺服器,可以理解為使用者資源的提供者。
那麼呼叫的流程則是:
使用者本身透過瀏覽器存取Client第三方的服務,Client透過建構OAuth2連結(參數包括目前第三方服務的身份ID,以及重定向URI),將使用者引導至認證伺服器的授權頁
此時使用者在瀏覽器上選擇是否同意授權
若使用者同意授權,則認證伺服器將使用者重定向到第一步指定的重定向URI,同時附上一個授權碼Code
d和e都是在服務端執行的,不需要透過瀏覽器OAuth2的設計
$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'];快取方案建議透過此協定取得到了使用者可以做一定的緩存,避免認證伺服器壓力過大。
以上是OAuth2.0協議的介紹以及PHP接入的詳細內容。更多資訊請關注PHP中文網其他相關文章!