概述
快速上手使用 Spring 提供的 Spring Security oAuth2 搭建一套驗證授權(quán)及資源訪問服務(wù)楣导,在實現(xiàn)企業(yè)微服務(wù)架構(gòu)時能夠有效的控制多個服務(wù)的統(tǒng)一登錄、授權(quán)及資源保護(hù)工作
什么是 oAuth
oAuth 協(xié)議為用戶資源的授權(quán)提供了一個安全的耽梅、開放而又簡易的標(biāo)準(zhǔn)除盏。與以往的授權(quán)方式不同之處是 oAuth 的授權(quán)不會使第三方觸及到用戶的帳號信息(如用戶名與密碼)叉橱,即第三方無需使用用戶的用戶名與密碼就可以申請獲得該用戶資源的授權(quán),因此 oAuth 是安全的者蠕。
什么是 Spring Security
Spring Security 是一個安全框架窃祝,前身是 Acegi Security,能夠為 Spring 企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制蠢棱。Spring Security 基于 Servlet 過濾器锌杀、IoC 和 AOP,為 Web 請求和方法調(diào)用提供身份確認(rèn)和授權(quán)處理泻仙,避免了代碼耦合糕再,減少了大量重復(fù)代碼工作。
為什么需要 oAuth2
我們假設(shè)你有一個“云筆記”產(chǎn)品玉转,并提供了“云筆記服務(wù)”和“云相冊服務(wù)”突想,此時用戶需要在不同的設(shè)備(PC、Android究抓、iPhone猾担、TV、Watch)上去訪問這些“資源”(筆記刺下,圖片)
那么用戶如何才能訪問屬于自己的那部分資源呢绑嘹?此時傳統(tǒng)的做法就是提供自己的賬號和密碼給我們的“云筆記”,登錄成功后就可以獲取資源了橘茉。但這樣的做法會有以下幾個問題:
- HTTP 服務(wù)提供商(HTTP service): 我們的云筆記產(chǎn)品以及 QQ工腋、微信等都可以稱之為“服務(wù)提供商”姨丈。
- 資源所有者(Resource Owner): 又稱之為用戶(user)。
- 用戶代理(User Agent): 比如瀏覽器擅腰,代替用戶去訪問這些資源蟋恬。
- 認(rèn)證服務(wù)器(Authorization server): 即服務(wù)提供商專門用來處理認(rèn)證的服務(wù)器,簡單點說就是登錄功能(驗證用戶的賬號密碼是否正確以及分配相應(yīng)的權(quán)限)
- 資源服務(wù)器(Resource server): 即服務(wù)提供商存放用戶生成的資源的服務(wù)器趁冈。它與認(rèn)證服務(wù)器歼争,可以是同一臺服務(wù)器,也可以是不同的服務(wù)器渗勘。簡單點說就是資源的訪問入口沐绒,比如上節(jié)中提到的“云筆記服務(wù)”和“云相冊服務(wù)”都可以稱之為資源服務(wù)器。
交互過程
oAuth 在 "客戶端" 與 "服務(wù)提供商" 之間呀邢,設(shè)置了一個授權(quán)層(authorization layer)洒沦。"客戶端" 不能直接登錄 "服務(wù)提供商"豹绪,只能登錄授權(quán)層价淌,以此將用戶與客戶端區(qū)分開來。"客戶端" 登錄授權(quán)層所用的令牌(token)瞒津,與用戶的密碼不同蝉衣。用戶可以在登錄的時候,指定授權(quán)層令牌的權(quán)限范圍和有效期巷蚪。"客戶端" 登錄授權(quán)層以后病毡,"服務(wù)提供商" 根據(jù)令牌的權(quán)限范圍和有效期,向 "客戶端" 開放用戶儲存的資料屁柏。