大家好,我是阿邁達,有趣的互聯網軟件工程師。專業角度分析技術原理,幽默的態度解讀科技互聯網資訊。
大家好,我是阿邁達,有趣的互聯網軟件工程師。專業角度分析技術原理,幽默的態度解讀科技互聯網資訊。
Oauth是目前認證用的最多的一種方式,如果一個網站支持用別的平臺用戶信息登錄,這中間基本都是基於Oauth實現的。Oauth的實現原理到底是怎樣的?有哪幾種認證方式呢?本文就將針對這些問題進行講解,讀完本文,相信你會對Oauth有一個完整的認識,也可以動手自己實現一個Oauth。
OAuth是用於授權的行業標準協議。OAuth致力於簡化客戶端開發人員的工作,同時為Web應用程序,桌面應用程序,移動電話和客廳設備提供特定的授權流程。Oauth發展經過了Oauth1.0和Oauth2.0的時代,Oauth1.0和Oauth2.0互相不兼容,目前廣泛使用的是Oauth2.0。
OAuth在客戶端與服務提供商之間設置了中間層:授權層。客戶端不能直接登錄服務提供商,只能登錄授權層,以此將用戶與客戶端區分開來。客戶端登錄授權層所用的令牌(token),與用戶的密碼不同。用戶可以在登錄的時候,指定授權層令牌的權限範圍和有效期。客戶端登錄授權層以後,服務提供商根據令牌的權限範圍和有效期,向客戶端開放用戶儲存的資料。
OAuth的客戶端獲取用戶信息是基於用戶授權的,也就是說客戶端要獲取用戶在某個平臺(服務提供商)的信息,事先要經過用戶的授權,Oauth的運行流程如下所示:
客戶端首先向用戶發起授權請求,用戶選擇需要授權給客戶端的資源,同意授權登陸客戶端。客戶端拿到授權信息以後,向授權服務器申請AccessToken,獲取到AccessToken以後,客戶端就可以訪問用戶授權範圍內的信息了。而在用戶授權的這一操作中,Oauth提供了四種授權的方式,分別為:授權碼模式、簡化模式、密碼模式、客戶端模式。
授權碼模式是最常用的一種授權模式。客戶端和授權服務直接通過授權碼來進行交互,Access_Token通過授權碼獲取。授權碼流程如下:
授權碼模式可以獲取到Refresh_Token,Refresh_Token可以用來刷新Access_Token的有效期,所以適合有服務端的應用程序,服務端可以保存Access_Token,不用頻繁獲取Access_Token。
簡化模式省去了獲取授權碼的步驟,客戶端攜帶client_id直接向授權服務器獲取Access_Token。授權碼流程如下:
簡化模式在客戶端直接就可以 直接完成,適合於沒有服務端的app。
密碼模式是基於用戶名密碼的授權模式,用戶通過在客戶端輸入用戶名密碼,客戶端攜帶用戶名密碼向授權服務器獲取Access_Token,授權流程如下:
密碼模式是一種不安全的授權的方式,用戶的密碼暴露給了客戶端,這種模式是用戶在完全信任客戶端模式的情況下完成的。
客戶端模式是客戶端直接向授權服務器獲取資源信息。授權流程如下:
這種授權模式嚴格來說不屬於Oauth範疇,因為整個授權過程中不涉及用戶授權的操作,客戶端直接向授權服務器獲取資源信息。
目前很多平臺都提供了基於Oauth的授權服務,例如:QQ、微博、Google、Github等平臺。網站可以接入這些平臺的授權API,用戶可以使用自己在這些平臺的賬號來授權登陸網站,我們以CSDN網站來舉例說明:
打開CSDN的登陸首頁,我們可以看到它支持用戶使用QQ、微博、百度、脈脈等賬號登陸,這些登陸方式都是基於Oauth認證方式。
這裡我們選擇使用微博授權登陸,點擊微博授權登陸以後,系統會跳轉到微博授權登陸頁面,如下圖所示:
觀察瀏覽器的地址,我們發現是微博提供的Oauth認證API。
因為是從CSDN登陸也跳轉到了微博的登陸頁面,所以用戶可以很放心的輸入自己的用戶名密碼,所以這就是Oauth的魅力所在,用戶並不直接向CSDN提供自己微博的用戶名密碼,所以是一種安全的授權模式。用戶在微博登陸自己的賬號以後,跳轉到授權頁面,如下圖所示:
授權頁面顯示了用戶將要授權哪些信息給CSDN,這裡包括用戶的個人信息(暱稱、頭像等基礎信息)、分享內容到微博、獲取評論信息等數據。授權成功以後,CSDN服務端就可以通過微博提供的API獲取當前用戶的以上信息。
以上就是整個Oauth的認證流程,如果我們是一個授權服務商,我們支持其它客戶端通過我們應用的用戶直接登錄,我們需要按照以上流程提供授權服務,主要包括:
按照以上的流程開發,就可以實現自己的授權服務。
Oauth是開放的授權協議,基於Oauth我們可以很容易實現自己的授權服務,這也是目前各大開放平臺的基礎服務功能。通過Oauth授權,可以打通第三方應用和平臺的數據互通、資源共享。而對於用戶來說,不用頻繁的註冊各類賬號,通過一個賬號就可以登錄各種客戶端APP和網站,就如現在大多數網站都支持用微信掃碼直接登錄,這是互聯網技術的一大進步。
閱讀更多 阿邁達聊技術 的文章