引言
現在很多網站都支持第三方授權登錄,小伙伴們應該很常見這種授權登錄方式了,那小伙伴們知道這種方式是以什么原理實作的么?
今天小編就為大家講一講里邊的奧秘!
正文
OAuth簡介
我們都知道,所有的第三方授權登錄底層基本上采用http/https協議,但是由于http/https協議是不可靠的,而客戶端和服務端都希望要達到100%的可靠性,所以以OAuth為代表的,基于http/https協議的授權標準也由此誕生并變成了主流,最開始在2006年出現的是OAuth1.0,由于1.0出現了一些安全漏洞等一些問題,5年后的2011年,該團隊發布了OAuth2.0標準,
由于目前各大網站已經基本淘汰了OAuth1.0,用OAuth2.0標準來實作的授權功能,所以這篇文章是針對OAuth2.0來介紹的,
角色介紹
OAuth可以分為四個角色,我們這里就拿掘金來舉例:
resource owner:可以理解為用戶,在這里就是你自己;只有這個用戶同意第三方或者基于OAuth的授權方式時,才能進行后續操作,
resource server:資源服務器,在這里就是掘金這個平臺,
client:即客戶:如果你是用瀏覽器瀏覽的掘金網站的話,那瀏覽器就是client,
authorization server:授權服務器;使用微信,GitHub,還是微博來授權呢,使用哪種方式哪個平臺就是authorization server,
運行流程
介紹完四個角色,接著讓我們來介紹一下它的運行流程:

(A)客戶端請求用戶的授權;用戶要告訴客戶端,是否要用第三方授權,是微信?QQ?還是微博?
(B)當用戶的同意授權后,把同意授權的訊息發送到客戶端,
(C)當B結束后,客戶端拿著這些同意授權的資訊去請求授權服務器,這里的授權服務器就是你所選的微信授權的服務器還是QQ授權的服務器,
(D)如果授權服務器得到并驗證這些授權資訊有效的話,這時授權服務器會頒發客戶端一個訪問令牌(在微信公眾號的網頁授權中,訪問令牌的欄位名稱是access_token)
(E)客戶端收到令牌,將其發送給資源服務器申請資源,這里的資源服務器就是我們的掘金服務器,
(F)資源服務器確認無誤后,說明認證通過,資源服務器可以將資源回傳給客戶端,
客戶端授權模式
在上面B步驟中,OAuth2.0一共有四種授權模式,我們來一一做個介紹:
授權碼模式(Authorization Code)
簡化模式(Implicit)
密碼模式(Resource Owner Password Credentials)
客戶端模式(Client Credentials)
授權碼模式(Authorization Code)
(A)用戶帶著客戶端識別符號,重定向的URI,本地狀態和請求范圍這四個屬性去請求授權服務器,這里的本地狀態是可選屬性,可以選擇不傳,但是如果不傳可能會遭受到CSRF攻擊,大家可以視情況而定;
(B)授權服務器對用戶進行身份驗證,用來確定用戶是授予還是拒絕;
(C)假設用戶被授予了訪問權限,授權服務器會將用戶重定向到之前所提供的重定向URI中,重定向URI中還包括本地狀態和客戶識別符號;
(D)接著客戶端將帶著本地狀態和客戶識別符號去請求授權服務器,目的是換取對應的訪問令牌;
(E)授權服務器接到客戶端的請求后,檢驗本地狀態和客戶識別符號,如果驗證通過,將為客戶端回傳對應的訪問令牌和(可選)重繪令牌,
簡化模式(Implicit Grant)
(A)客戶端代理用戶去請求授權服務器;
(B)用戶決定是否給客戶端授權;
(C)當用戶同意授權后,客戶端將重定向到重定向URI,重定向URI中并存在著訪問令牌;
(D)接著瀏覽器請求資源服務器,并且不用帶著訪問令牌;
(E)資源服務器通過認證后,回傳一個網頁,并包含訪問令牌;
(F)瀏覽器決議這個網頁并提取訪問令牌;
(G)瀏覽器發送令牌給到客戶端,
密碼模式(Resource Owner Password Credentials)
(A)用戶向客戶端提供用戶名和密碼;
(B)客戶端將用戶提供的資源請求授權服務器;
(C)授權服務器進行身份驗證,通過后發出訪問令牌,
客戶端模式(Client Credentials)
(A)客戶端向授權服務器進行身份驗證,所要訪問令牌;
(B)授權服務器向客戶端進行身份驗證,如果有效,則發出訪問令牌,
文章說到現在,你對第三方登錄了解了多少呢?歡迎在文章下方談談你的看法或者識訓!
另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!
C語言C++編程學習交流圈子,QQ群757874045【點擊進入】微信公眾號:C語言編程學習基地
分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習軟體分享:
編程學習視頻分享:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/128839.html
標籤:其他
上一篇:關于腳本語言
