有乙個"雲沖印"的**,可以將使用者儲存在google的**,沖印出來。使用者為了使用該服務,必須讓"雲沖印"讀取自己儲存在google上的**。
問題是只有得到使用者的授權,google才會同意"雲沖印"讀取這些**。那麼,"雲沖印"怎樣獲得使用者的授權呢?
傳統方法是,使用者將自己的google使用者名稱和密碼,告訴"雲沖印",後者就可以讀取使用者的**了。這樣的做法有以下幾個嚴重的缺點。
(1)"雲沖印"為了後續的服務,會儲存使用者的密碼,這樣很不安全。oauth就是為了解決上面這些問題而誕生的。(2)google不得不部署密碼登入,而我們知道,單純的密碼登入並不安全。
(3)"雲沖印"擁有了獲取使用者儲存在google所有資料的權力,使用者沒法限制"雲沖印"獲得授權的範圍和有效期。
(4)使用者只有修改密碼,才能收回賦予"雲沖印"的權力。但是這樣做,會使得其他所有獲得使用者授權的第三方應用程式全部失效。
(5)只要有乙個第三方應用程式被破解,就會導致使用者密碼洩漏,以及所有被密碼保護的資料洩漏
(5)authorization server:認證伺服器,即服務提供商專門用來處理認證的伺服器。
(6)resource server:資源伺服器,即服務提供商存放使用者生成的資源的伺服器。它與認證伺服器,可以是同一臺伺服器,也可以是不同的伺服器。
知道了上面這些名詞,就不難理解,oauth的作用就是讓"客戶端"安全可控地獲取"使用者"的授權,與"服務商提供商"進行互動。
oauth在"客戶端"與"服務提供商"之間,設定了乙個授權層(authorization layer)。"客戶端"不能直接登入"服務提供商",只能登入授權層,以此將使用者與客戶端區分開來。"客戶端"登入授權層所用的令牌(token),與使用者的密碼不同。使用者可以在登入的時候,指定授權層令牌的許可權範圍和有效期。
"客戶端"登入授權層以後,"服務提供商"根據令牌的許可權範圍和有效期,向"客戶端"開放使用者儲存的資料。
(a)使用者開啟客戶端以後,客戶端要求使用者給予授權。不難看出來,上面六個步驟之中,b是關鍵,即使用者怎樣才能給於客戶端授權。有了這個授權以後,客戶端就可以獲取令牌,進而憑令牌獲取資源。(b)使用者同意給予客戶端授權。
(c)客戶端使用上一步獲得的授權,向認證伺服器申請令牌。
(d)認證伺服器對客戶端進行認證以後,確認無誤,同意發放令牌。
(e)客戶端使用令牌,向資源伺服器申請獲取資源。
(f)資源伺服器確認令牌無誤,同意向客戶端開放資源。
下面一一講解客戶端獲取授權的四種模式。
客戶端必須得到使用者的授權(authorization grant),才能獲得令牌(access token)。oauth 2.0定義了四種授權方式。
授權碼模式(authorization code)是功能最完整、流程最嚴密的授權模式。它的特點就是通過客戶端的後台伺服器,與"服務提供商"的認證伺服器進行互動。
它的步驟如下:
(a)使用者訪問客戶端,後者將前者導向認證伺服器。下面是上面這些步驟所需要的引數。(b)使用者選擇是否給予客戶端授權。
(c)假設使用者給予授權,認證伺服器將使用者導向客戶端事先指定的"重定向uri"(redirection uri),同時附上乙個授權碼。
(d)客戶端收到授權碼,附上早先的"重定向uri",向認證伺服器申請令牌。這一步是在客戶端的後台的伺服器上完成的,對使用者不可見。
(e)認證伺服器核對了授權碼和重定向uri,確認無誤後,向客戶端傳送訪問令牌(access token)和更新令牌(refresh token)。
a步驟中,客戶端申請認證的uri,包含以下引數:
下面是乙個例子。
c步驟中,伺服器回應客戶端的uri,包含以下引數:
下面是乙個例子。
d步驟中,客戶端向認證伺服器申請令牌的http請求,包含以下引數:
下面是乙個例子。
e步驟中,認證伺服器傳送的http回覆,包含以下引數:
下面是乙個例子。
實戰OAUTH 2 0授權機制
oauth 2.0是現在業界流行的認證授權方式,使用者可以授權應用程式在不提供使用者的密碼的場景下,可以遵循oauth的規範來申請獲取訪問伺服器的使用者相關資源的許可權。oauth 2.0的規範和流程還是比較難理解的,因此我用keycloak來實際演示一下如何按照oauth 2.0的協議來進行授權。...
OAuth 授權過程
oauth認證過稱需要你的應用和google的授權伺服器,終端使用者做一系列互動。基本的互動過稱 1.你的應用從google的授權伺服器獲得乙個未授權的請求token 2.google要求使用者給予你的應用訪問需要的資料。比如你要訪問gmail,google把頁面引導到gmail的登入頁面,提示使用...
什麼是OAuth授權?
一 什麼是oauth協議 oauth 開放授權 是乙個開放標準。允許第三方 在使用者授權的前提下訪問在使用者在服務商那裡儲存的各種資訊。而這種授權無需將使用者提供使用者名稱和密碼提供給該第三方 oauth允許使用者提供乙個令牌給第三方 乙個令牌對應乙個特定的第三方 同時該令牌只能在特定的時間內訪問特...