微服務系列之 Oauth2安全認證

2021-10-16 16:50:42 字數 2298 閱讀 5069

總結oauth是乙個關於授權(authorization)的開放網路標準,在業界得到廣泛應用,目前的版本是2.0版。

簡單來說就是客戶端應用程式(通常是web瀏覽器)代表使用者(得到了使用者的批准)去訪問受保護的資源。

oauth2的設計背景,在於允許使用者在不告知第三方自己的帳號密碼情況下,通過授權方式,讓第三方服務可以獲取自己的資源資訊。

下面簡單說明oauth2中最經典的authorization code模式,流程如下:

呼叫流程:

使用者訪問第三方服務,第三方服務通過構造oauth2鏈結(引數包括當前第三方服務的身份id,以及重定向uri),將使用者引導到認證伺服器的授權頁

使用者選擇是否同意授權

若使用者同意授權,則認證伺服器將使用者重定向到第一步指定的重定向uri,同時附上乙個授權碼。

第三方服務收到授權碼,帶上授權碼**的重定向uri,向認證伺服器申請憑證。

認證伺服器檢查授權碼和重定向uri的有效性,通過後頒發accesstoken(呼叫憑證)

4/5 的呼叫為後台呼叫,不通過瀏覽器進行

另外一種說法,其實就是比上一步多了資源伺服器,這種是將許可權認證與具體的業務模組做了分離。

呼叫流程:

使用者開啟客戶端以後,客戶端要求使用者給予授權

使用者同意給予客戶端授權

客戶端使用上一步獲得的授權,向認證伺服器申請令牌

認證伺服器對客戶端進行認證以後,確認無誤,同意發放令牌

客戶端使用令牌,向資源伺服器申請獲取資源

資源伺服器確認令牌無誤,同意向客戶端開放資源

客戶端必須得到使用者的授權(authorization grant),才能獲得令牌(access token)。oauth 2.0 定義了四種授權方式:authorization code、implicit、resource owner password credentials、client credentials。

授權碼模式(authorization code)是功能最完整、流程最嚴密的授權模式。它的特點就是通過客戶端的後台伺服器,與」服務提供商」的認證伺服器進行互動。流程如下:

使用者訪問客戶端,後者將前者導向認證伺服器。

使用者選擇是否給予客戶端授權。

假設使用者給予授權,認證伺服器將使用者導向客戶端事先指定的」重定向 uri」(redirection uri),同時附上乙個授權碼。

客戶端收到授權碼,附上早先的」重定向 uri」,向認證伺服器申請令牌。這一步是在客戶端的後台的伺服器上完成的,對使用者不可見。

認證伺服器核對了授權碼和重定向 uri,確認無誤後,向客戶端傳送訪問令牌(access token)和更新令牌(refresh token)。

簡化模式(implicit grant type)不通過第三方應用程式的伺服器,直接在瀏覽器中向認證伺服器申請令牌,跳過了」授權碼」這個步驟,因此得名。所有步驟在瀏覽器中完成,令牌對訪問者是可見的,且客戶端不需要認證。流程如下:

客戶端將使用者導向認證伺服器。

使用者決定是否給於客戶端授權。

假設使用者給予授權,認證伺服器將使用者導向客戶端指定的」重定向 uri」,並在 uri 的 hash 部分包含了訪問令牌。

瀏覽器向資源伺服器發出請求,其中不包括上一步收到的 hash 值。

資源伺服器返回乙個網頁,其中包含的**可以獲取 hash 值中的令牌。

瀏覽器執行上一步獲得的指令碼,提取出令牌。

瀏覽器將令牌發給客戶端。

密碼模式(resource owner password credentials)中,使用者向客戶端提供自己的使用者名稱和密碼。客戶端使用這些資訊,向」服務商提供商」索要授權。在這種模式中,使用者必須把自己的密碼給客戶端,但是客戶端不得儲存密碼。流程如下:

使用者向客戶端提供使用者名稱和密碼。

客戶端將使用者名稱和密碼發給認證伺服器,向後者請求令牌。

認證伺服器確認無誤後,向客戶端提供訪問令牌。

客戶端模式(client credentials grant)指客戶端以自己的名義,而不是以使用者的名義,向」服務提供商」進行認證。

在這種模式中,使用者直接向客戶端註冊,客戶端以自己的名義要求」服務提供商」提供服務,其實不存在授權問題。流程如下:

客戶端向認證伺服器進行身份認證,並要求乙個訪問令牌。

認證伺服器確認無誤後,向客戶端提供訪問令牌。

微服務統 認證 案 OAuth2

基於session的認證方式 在分布式的環境下,基於session的認證會出現 個問題,每個應 服務都需要在session中儲存 戶身份資訊,通過負載均衡將本地的請求分配到另 個應 服務需要將session資訊帶過去,否則會重新認證。我們可以使 session共享 session黏貼等 案。sess...

深入OAuth2 微服務下的SSO單點登入

在前兩篇部落格中介紹了oauth2和springsecurity的基本知識,本篇介紹oauth2協議實現的sso單點登入。認證伺服器的配置和之前的差不多,把客戶端資訊存到了資料中,不在是記憶體裡 這個請求最終不會被zuul 到後端伺服器 requestcontext.setsendzuulrespo...

擴充套件資源伺服器解決oauth2 效能瓶頸

本文是針對傳統使用uuid token 的情況進行擴充套件,提高系統的吞吐率,解決效能瓶頸的問題 override public oauth2authentication loadauthentication string accesstoken throws authenticationexcep...