微服務架構統一安全認證設計與實踐
點擊關注公眾號,Java干貨及時送達??

當企業(yè)應用系統逐漸增多后,每個系統單獨管理各自的用戶數據容易形成信息孤島,分散的用戶管理模式阻礙了企業(yè)應用向平臺化演進。當企業(yè)的互聯網業(yè)務發(fā)展到一定規(guī)模,構建統一的標準化賬戶管理體系將是必不可少的,因為它是企業(yè)互聯網云平臺的重要基礎設施,能夠為平臺帶來統一的帳號管理、身份認證、用戶授權等基礎能力,為企業(yè)帶來諸如跨系統單點登錄、第三方授權登錄等基礎能力,為構建開放平臺和業(yè)務生態(tài)提供了必要條件。
Third-party application:第三方應用程序,本文中又稱“客戶端”(client)。
HTTP service:HTTP服務提供商,本文中簡稱“服務提供商”。
Resource Owner:資源所有者,本文中又稱“用戶”(user),即登錄用戶。
User Agent:用戶代理,本文中就是指瀏覽器。
Authorization server:認證服務器,即服務提供商專門用來處理認證的服務器。
Resource server:資源服務器,即服務提供商存放用戶生成的資源的服務器。它與認證服務器,可以是同一臺服務器,也可以是不同的服務器。
服務端無狀態(tài):Token 機制在服務端不需要存儲 session 信息,因為 Token 自身包含了所有用戶的相關信息。
性能較好,因為在驗證 Token 時不用再去訪問數據庫或者遠程服務進行權限校驗,自然可以提升不少性能。
支持移動設備,支持跨程序調用,Cookie 是不允許垮域訪問的,而 Token 則不存在這個問題。
用戶輸入登錄信息(或者調用 Token 接口,傳入用戶信息),發(fā)送到身份認證服務進行認證(身份認證服務可以和服務端在一起,也可以分離,看微服務拆分情況了)。
身份驗證服務驗證登錄信息是否正確,返回接口(一般接口中會包含用戶基礎信息、權限范圍、有效時間等信息),客戶端存儲接口,可以存儲在 Session 或者數據庫中。
客戶端將 Token 放在 HTTP 請求頭中,發(fā)起相關 API 調用。
被調用的微服務,驗證 Token 權限。
服務端返回相關資源和數據。

獲取憑證,第三方應用客戶端使用客戶端編碼/安全碼、資源所有者用戶名/密碼等證件信息從授權服務器上獲取 Access Token 資源訪問憑證。
登錄授權,客戶端攜帶 Access Token 憑證訪問服務器資源,資源服務器驗證 Token、第三方應用憑證信息、資源所有者 User 合法性,通過 Token 讀取資源所有者身份信息(user)加載資源所有者的權限項執(zhí)行登錄。
訪問鑒權,第三方應用客戶端訪問服務端資源,系統驗證訪問者 Access Token 合法性、權限信息,驗證憑證(Access Token)正確,此時資源服務器就會返回資源信息。
憑證續(xù)約,Access token 訪問憑證過期需要進行憑證續(xù)約,刷新 Token 憑證有效期。
系統授權采用 OAuth2 開放式授權標準密碼模式。
Token 采用 JWT 標準。
授權碼模式(authorization code)用在客戶端與服務端應用之間授權碼。
簡化模式(implicit)用在移動 app 或者 web app(這些 app 是在用戶的設備上的,如在手機上調起微信來進行認證授權)。不通過第三方應用程序的服務器,直接在瀏覽器中向認證服務器申請令牌,跳過了“授權碼”這個步驟,因此得名。所有步驟在瀏覽器中完成,令牌對訪問者是可見的,且客戶端不需要認證。
密碼模式(resource owner password credentials)應用直接都是受信任的(都是由一家公司開發(fā)的)密碼模式中,用戶向客戶端提供自己的用戶名和密碼。客戶端使用這些信息,向“服務商提供商”索要授權。在這種模式中,用戶必須把自己的密碼給客戶端,但是客戶端不得儲存密碼。
客戶端模式(client credentials)用在應用 API 訪問客戶端模式(Client Credentials Grant)指客戶端以自己的名義,而不是以用戶的名義,向“服務提供商”進行認證。嚴格地說,客戶端模式并不屬于 OAuth 框架所要解決的問題。在這種模式中,用戶直接向客戶端注冊,客戶端以自己的名義要求“服務提供商”提供服務,其實不存在授權問題。










作者:mars
來源:https://juejin.cn/post/6906149001520037902
2.?2萬字詳解,徹底講透 全文搜索引擎 Elasticsearch
最近面試BAT,整理一份面試資料《Java面試BATJ通關手冊》,覆蓋了Java核心技術、JVM、Java并發(fā)、SSM、微服務、數據庫、數據結構等等。
獲取方式:點“在看”,關注公眾號并回復?Java?領取,更多內容陸續(xù)奉上。
PS:因公眾號平臺更改了推送規(guī)則,如果不想錯過內容,記得讀完點一下“在看”,加個“星標”,這樣每次新文章推送才會第一時間出現在你的訂閱列表里。
點“在看”支持小哈呀,謝謝啦??

