電腦知識:很多網(wǎng)站都支持第三方授權登錄,這究竟是怎么一回事?
引言
現(xiàn)在很多網(wǎng)站都支持第三方授權登錄,小伙伴們應該很常見這種授權登錄方式了,那小伙伴們知道這種方式是以什么原理實現(xiàn)的么?
今天小編就為大家講一講里邊的奧秘!

正文
OAuth簡介

我們都知道,所有的第三方授權登錄底層基本上采用http/https協(xié)議。但是由于http/https協(xié)議是不可靠的,而客戶端和服務端都希望要達到100%的可靠性。所以以OAuth為代表的,基于http/https協(xié)議的授權標準也由此誕生并變成了主流。最開始在2006年出現(xiàn)的是OAuth1.0,由于1.0出現(xiàn)了一些安全漏洞等一些問題,5年后的2011年,該團隊發(fā)布了OAuth2.0標準。
由于目前各大網(wǎng)站已經(jīng)基本淘汰了OAuth1.0,用OAuth2.0標準來實現(xiàn)的授權功能,所以這篇文章是針對OAuth2.0來介紹的。
角色介紹

OAuth可以分為四個角色,我們這里就拿掘金來舉例:
resource owner:可以理解為用戶,在這里就是你自己;只有這個用戶同意第三方或者基于OAuth的授權方式時,才能進行后續(xù)操作。
resource server:資源服務器,在這里就是掘金這個平臺。
client:即客戶:如果你是用瀏覽器瀏覽的掘金網(wǎng)站的話,那瀏覽器就是client。
authorization server:授權服務器;使用微信,GitHub,還是微博來授權呢,使用哪種方式哪個平臺就是authorization server。

運行流程
介紹完四個角色,接著讓我們來介紹一下它的運行流程:

(A)客戶端請求用戶的授權;用戶要告訴客戶端,是否要用第三方授權,是微信?QQ?還是微博?
(B)當用戶的同意授權后,把同意授權的消息發(fā)送到客戶端。
(C)當B結束后,客戶端拿著這些同意授權的信息去請求授權服務器,這里的授權服務器就是你所選的微信授權的服務器還是QQ授權的服務器。
(D)如果授權服務器得到并驗證這些授權信息有效的話,這時授權服務器會頒發(fā)客戶端一個訪問令牌(在微信公眾號的網(wǎng)頁授權中,訪問令牌的字段名稱是access_token)
(E)客戶端收到令牌,將其發(fā)送給資源服務器申請資源,這里的資源服務器就是我們的掘金服務器。
(F)資源服務器確認無誤后,說明認證通過,資源服務器可以將資源返回給客戶端。
客戶端授權模式
在上面B步驟中,OAuth2.0一共有四種授權模式,我們來一一做個介紹:

授權碼模式(Authorization Code)
簡化模式(Implicit)
密碼模式(Resource Owner Password Credentials)
客戶端模式(Client Credentials)
授權碼模式(Authorization Code)

(A)用戶帶著客戶端標識符,重定向的URI,本地狀態(tài)和請求范圍這四個屬性去請求授權服務器。這里的本地狀態(tài)是可選屬性,可以選擇不傳。但是如果不傳可能會遭受到CSRF攻擊,大家可以視情況而定;
(B)授權服務器對用戶進行身份驗證,用來確定用戶是授予還是拒絕;
(C)假設用戶被授予了訪問權限,授權服務器會將用戶重定向到之前所提供的重定向URI中。重定向URI中還包括本地狀態(tài)和客戶標識符;
(D)接著客戶端將帶著本地狀態(tài)和客戶標識符去請求授權服務器,目的是換取對應的訪問令牌;
(E)授權服務器接到客戶端的請求后,檢驗本地狀態(tài)和客戶標識符,如果驗證通過,將為客戶端返回對應的訪問令牌和(可選)刷新令牌。
簡化模式(Implicit Grant)

(A)客戶端代理用戶去請求授權服務器;
(B)用戶決定是否給客戶端授權;
(C)當用戶同意授權后,客戶端將重定向到重定向URI,重定向URI中并存在著訪問令牌;
(D)接著瀏覽器請求資源服務器,并且不用帶著訪問令牌;
(E)資源服務器通過認證后,返回一個網(wǎng)頁,并包含訪問令牌;
(F)瀏覽器解析這個網(wǎng)頁并提取訪問令牌;
(G)瀏覽器發(fā)送令牌給到客戶端。
密碼模式(Resource Owner Password Credentials)

(A)用戶向客戶端提供用戶名和密碼;
(B)客戶端將用戶提供的資源請求授權服務器;
(C)授權服務器進行身份驗證,通過后發(fā)出訪問令牌。
客戶端模式(Client Credentials)

(A)客戶端向授權服務器進行身份驗證,所要訪問令牌;
(B)授權服務器向客戶端進行身份驗證,如果有效,則發(fā)出訪問令牌。
文章說到現(xiàn)在,你對第三方登錄了解了多少呢?歡迎在文章下方談談你的看法或者收獲!
另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!
分享(源碼、項目實戰(zhàn)視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!

學習C/C++編程知識,提升C/C++編程能力,歡迎關注UP一起來成長!
另外,UP在主頁上傳了一些學習C/C++編程的視頻教程,有興趣或者正在學習的小伙伴一定要去看一看哦!會對你有幫助的~
編程學習軟件分享:

編程學習視頻分享:
