日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

最開始接觸 OAuth2.0 的時候,經常將它和 SSO單點登錄搞混。后來因為工作需要,在項目中實現了一套SSO,通過對SSO的逐漸了解,也把它和OAuth2.0區分開了。所以當時自己也整理了一篇文章 SSO單點登錄三種情況的實現方式詳解_跡憶客 有興趣的小伙伴可以看一下

最近需要經常和各大電商平臺進行對接,所以又和OAuth2.0重逢了。因此這里再次對OAuth2.0的原理及實現方式進行一個梳理,希望通過這套教程能夠幫到大家。對于技術類的文章,這引言是有點過長了。好了下面我們進入正題。

什么是 OAuth2.0

OAuth 是一種開放的授權協議,它是目前最流行的授權機制。它允許將存儲在一個站點上的資源共享到另一個站點,而無需使用該站點的憑據。

這類定義一般都比較抽象,要理解起來不是太容易。所以這里我們通過一個實際應用的類比來說明一下這個場景,你會發現,其實OAuth2.0的原理并不復雜。

首先,假設我在微信上注冊了賬號,然后加了一些好友,并且有一些聊天記錄。

然后,我正在訪問一個網站/應用。這里假設正在訪問 www.jiyik.com 。這個網站有一項功能是可以獲取微信號上的好友和聊天,然后對這些信息進行一個統計分析的功能(當然,本站是沒有這項功能的)。

個人感覺這項功能不錯,就想使用它。有一種方式是我可以把個人的微信賬號和密碼告訴這個應用。應用可以通過賬號密碼獲取到好友信息和聊天記錄。但是這樣我感覺很不安全,如果我以后不想再繼續使用了,那我還得再去修改賬號和密碼。那樣就會很麻煩了。所以這里就需要一種方式可以使得我將一些權限授權給該網站,使其可以不用賬號和密碼就可以獲取到這些信息。 這種授權方式就是 OAuth2.0。當我不再想使用該功能的時候,我就可以把權限收回或者使授權失效。

所以說一個完整的OAuth2.0 的流程需要涉及到三個實體。

帶你全面了解 OAuth2.0

OAuth2.0原理示例

  • 資源服務商 (微信,google,Facebook等)
  • 第三方網站/應用
  • 用戶

當有另一個第三方的網站要使用微信賬號登錄其系統時,同樣我們也可以通過授權的方式登錄這個第三方的網站。這樣就實現了同一個微信賬號可以多個不同的網站進行登錄。這也是一種單點登錄,這也是為什么最初經常會將其和SSO單點登錄搞混的原因。

通過上面的場景,我們大概也能清楚OAuth2.0的基本的原理了。下面我們通過整體介紹一下其架構,來更深入的了解其工作原理。

OAuth2.0 架構

帶你全面了解 OAuth2.0

OAuth2.0-認證架構

整個的流程是這樣的。

一、 首先,用戶使用 Google、微信 等第三方應用程序訪問資源。

二、 第三方網站會帶著客戶端ID和客戶端密鑰重定向到資源服務的授權登錄界面。

三、 用戶會接收到一個Google或微信的授權登錄界面。用戶需要在該界面進行授權。

四、 用戶使用身份驗證應用程序登錄。客戶端 ID 和客戶端密鑰對于授權服務器上的客戶端應用程序是唯一的。

五、 身份驗證服務器使用授權代碼將用戶重定向到重定向統一資源標識符 (URI)。這個地址是第三方網站在接入資源服務的認證服務時提交給認證服務的,當用戶授權成功后,會被重定向到該網址。

六、 用戶訪問位于客戶端應用程序中重定向 URI 的頁面,該頁面此時會帶有一個用于驗證的Code。

七、 客戶端應用程序將獲得身份驗證Code、客戶端 ID 和客戶端密鑰,并將它們發送到授權服務器。

八、 身份驗證應用程序向客戶端應用程序返回訪問令牌。

九、 一旦客戶端應用程序獲得訪問令牌,用戶開始使用客戶端應用程序訪問資源所有者的資源。

整個OAuth2.0的流程就是這樣的。這其中會涉及到一些HTTP的知識點,關于HTTP可以參考我們的 HTTP教程。

OAuth2.0會涉及到很多術語和概念,下面我們對這些術語概念進行一些解釋。

術語

驗證

身份驗證是識別一個用戶的過程,通常是基于用戶個人的用戶名和密碼。通過用戶名和密碼來驗證該用戶是否是一個合法的資源持有者。

聯合身份驗證

許多第三方網站/應用都有自己的用戶名和密碼。某些應用程序依賴于其他服務來驗證用戶的身份。聯合身份管理系統提供對多個系統的單一訪問。這稱為聯合身份驗證。

授權

授權是允許某人做某事的過程。它需要有效用戶的身份來檢查該用戶是否被授權。

委托授權

委托授權是將自己的憑據提供給其他用戶以代表該用戶執行某些操作的過程。

角色

OAuth 定義了以下角色

帶你全面了解 OAuth2.0

OAuth2.0 角色

  • 資源所有者 - 資源所有者被定義為能夠授予訪問其在資源服務器上托管的自己數據的能力的實體。當資源所有者是個人時,稱為最終用戶。
  • 客戶端應用程序 - 客戶端是一個應用程序,它發出受保護的資源請求以代表資源所有者執行操作。
  • 資源服務器 - 資源服務器是可用于訪問用戶信息的 API 服務器。
  • 認證服務器 - 認證服務器從資源所有者那里獲得許可并將訪問令牌分發給客戶端,以訪問由資源服務器托管的受保護資源。

Web 服務器

Web 服務器是一個計算機系統,它使用 HTTP協議 將網頁傳送給用戶。只要應用程序想要訪問資源服務器,客戶端ID和密鑰就存儲在web應用程序服務器上。將客戶端ID和密鑰存儲在 Web 應用程序服務器上的目的是保密。

帶你全面了解 OAuth2.0

客戶端 Web 應用程序服務器

在上圖中,資源所有者允許機密客戶端訪問托管在資源服務器上的數據,其中客戶端 ID 和密鑰保存在服務器上并且是保密的。

客戶端 ID 和密鑰對于授權服務器上的客戶端應用程序是唯一的。

資源服務器是一個服務器,它承載著 Google、微信等資源。這些資源存儲在資源服務器上,供客戶端應用程序訪問,資源所有者擁有這些資源。

然后,授權服務器使用客戶端 Web 應用程序訪問資源所有者的資源。


用戶代理

用戶代理應用程序由用戶設備中的客戶端應用程序使用,它可以是一個腳本語言,例如在瀏覽器中運行的 JAVAScript。所以說我們可以將用戶代理應用程序存儲在 Web 服務器上。

下圖顯示了客戶端用戶代理應用程序的架構。

帶你全面了解 OAuth2.0

OAuth2.0 客戶端用戶代理應用程序的架構

一、 首先,用戶使用 Google、微信 等身份驗證應用程序訪問資源所有者的資源。

二、 接下來,用戶應用程序提供客戶端 ID 和客戶端密鑰,從而登錄到授權服務器。

三、 然后,用戶代理應用程序提供一個在瀏覽器中運行的 JavaScript 應用程序實例并鏈接到 Web 服務器。

四、 授權服務器允許使用客戶端憑據從資源服務器訪問資源。

五、 資源服務器包含由資源所有者擁有的資源。


本機應用程序

本機應用程序可以用作桌面或手機應用程序的實例,它使用資源所有者憑據。它是安裝在資源所有者設備上的客戶端應用程序。

應用程序使用的身份驗證憑據包含在應用程序代碼中。因此,不要使用在外部用戶代理中運行的本機應用程序。

帶你全面了解 OAuth2.0

OAuth2.0 客戶端本機應用程序的架構

一、 首先,用戶使用 Google、微信 等身份驗證應用程序訪問資源所有者的資源。

二、 接下來,本機應用程序使用客戶端 ID 和客戶端密鑰登錄到授權服務器。本機應用程序是桌面或手機應用程序的實例,它安裝在用戶計算機上,并將客戶端密鑰存儲在計算機或設備上。

三、 授權服務器允許使用客戶端憑據從資源服務器訪問資源。

四、 資源服務器包含由資源所有者擁有的資源。

總結

以上我們介紹了OAuth2.0 的整體流程,以及這中間涉及到的一些術語和概念我們分別進行了介紹。這要求我們對HTTP協議的原理要稍微有些了解。通過上面的介紹其實我們可以看到,整個過程較為核心的部分就是對 訪問令牌的獲取。可以查看OAuth2.0 - 頒發訪問令牌的幾種方式 來了解如何獲取訪問令牌。

分享到:
標簽:OAuth2
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定