版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
OAuth2和JWT-如何設(shè)計(jì)安全的API?本文會(huì)詳細(xì)描述兩種通用的保證API安全性的方法:OAuth2和JSONWebToken(JWT)假設(shè):你已經(jīng)或者正在實(shí)現(xiàn)API;你正在考慮選擇一個(gè)合適的方法保證API的安全性;JWT和OAuth2比較?要比較JWT和OAuth2?首先要明白一點(diǎn)就是,這兩個(gè)根本沒有可比性,是兩個(gè)完全不同的東西。JWT是一種認(rèn)證協(xié)議
JWT提供了一種用于發(fā)布接入令牌(AccessToken),并對(duì)發(fā)布的簽名接入令牌進(jìn)行驗(yàn)證的方法。令牌(Token)本身包含了一系列聲明,應(yīng)用程序可以根據(jù)這些聲明限制用戶對(duì)資源的訪問。OAuth2是一種授權(quán)框架
另一方面,OAuth2是一種授權(quán)框架,提供了一套詳細(xì)的授權(quán)機(jī)制(指導(dǎo))。用戶或應(yīng)用可以通過公開的或私有的設(shè)置,授權(quán)第三方應(yīng)用訪問特定資源。既然JWT和OAuth2沒有可比性,為什么還要把這兩個(gè)放在一起說呢?實(shí)際中確實(shí)會(huì)有很多人拿JWT和OAuth2作比較。標(biāo)題里把這兩個(gè)放在一起,確實(shí)有誤導(dǎo)的意思。很多情況下,在討論OAuth2的實(shí)現(xiàn)時(shí),會(huì)把JSONWebToken作為一種認(rèn)證機(jī)制使用。這也是為什么他們會(huì)經(jīng)常一起出現(xiàn)。先來搞清楚JWT和OAuth2究竟是干什么的~JSONWebToken(JWT)JWT在標(biāo)準(zhǔn)中是這么定義的:JSONWebToken(JWT)isacompactURL-safemeansofrepresentingclaimstobetransferredbetweentwoparties.TheclaimsinaJWTareencodedasaJSONobjectthatisdigitallysignedusingJSONWebSignature(JWS).
-RFC7519/html/rfc7519
JWT是一種安全標(biāo)準(zhǔn)。基本思路就是用戶提供用戶名和密碼給認(rèn)證服務(wù)器,服務(wù)器驗(yàn)證用戶提交信息信息的合法性;如果驗(yàn)證成功,會(huì)產(chǎn)生并返回一個(gè)Token(令牌),用戶可以使用這個(gè)token訪問服務(wù)器上受保護(hù)的資源。一個(gè)token的例子:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ一個(gè)token包含三部分:header.claims.signature了安全的在url中使用,所有部分都base64URL-safe進(jìn)行編碼處理。Header頭部分
頭部分簡(jiǎn)單聲明了類型(JWT)以及產(chǎn)生簽名所使用的算法。{"alg":"AES256","typ":"JWT"}Claims聲明
聲明部分是整個(gè)token的核心,表示要發(fā)送的用戶詳細(xì)信息。有些情況下,我們很可能要在一個(gè)服務(wù)器上實(shí)現(xiàn)認(rèn)證,然后訪問另一臺(tái)服務(wù)器上的資源;或者,通過單獨(dú)的接口來生成token,token被保存在應(yīng)用程序客戶端(比如瀏覽器)使用。
一個(gè)簡(jiǎn)單的聲明(claim)的例子:{"sub":"1234567890","name":"JohnDoe","admin":true}Signature簽名
簽名的目的是為了保證上邊兩部分信息不被篡改。如果嘗試使用Bas64對(duì)解碼后的token進(jìn)行修改,簽名信息就會(huì)失效。一般使用一個(gè)私鑰(privatekey)通過特定算法對(duì)Header和Claims進(jìn)行混淆產(chǎn)生簽名信息,所以只有原始的token才能于簽名信息匹配。
這里有一個(gè)重要的實(shí)現(xiàn)細(xì)節(jié)。只有獲取了私鑰的應(yīng)用程序(比如服務(wù)器端應(yīng)用)才能完全認(rèn)證token包含聲明信息的合法性。所以,永遠(yuǎn)不要把私鑰信息放在客戶端(比如瀏覽器)。OAuth2是什么?
相反,OAuth2不是一個(gè)標(biāo)準(zhǔn)協(xié)議,而是一個(gè)安全的授權(quán)框架。它詳細(xì)描述了系統(tǒng)中不同角色、用戶、服務(wù)前端應(yīng)用(比如API),以及客戶端(比如網(wǎng)站或移動(dòng)App)之間怎么實(shí)現(xiàn)相互認(rèn)證。TheOAuth2.0authorizationframeworkenablesathird-partyapplicationtoobtainlimitedaccesstoanHTTPservice,eitheronbehalfofaresourceownerbyorchestratinganapprovalinteractionbetweentheresourceownerandtheHTTPservice,orbyallowingthethird-partyapplicationtoobtainaccessonitsownbehalf.
-RFC6749/html/rfc6749這里簡(jiǎn)單說一下涉及到的基本概念。Roles角色
應(yīng)用程序或者用戶都可以是下邊的任何一種角色:資源擁有者資源服務(wù)器客戶端應(yīng)用認(rèn)證服務(wù)器ClientTypes客戶端類型
這里的客戶端主要指API的使用者。它可以是的類型:私有的公開的ClientProfile客戶端描述
OAuth2框架也指定了集中客戶端描述,用來表示應(yīng)用程序的類型:Web應(yīng)用用戶代理原聲應(yīng)用AuthorizationGrants認(rèn)證授權(quán)
認(rèn)證授權(quán)代表資源擁有者授權(quán)給客戶端應(yīng)用程序的一組權(quán)限,可以是下邊幾種形式:授權(quán)碼隱式授權(quán)資源擁有者密碼證書客戶端證書Endpoints終端OAuth2框架需要下邊幾種終端:認(rèn)證終端Token終端重定向終端從上邊這些應(yīng)該可以看出,OAuth2定義了一組相當(dāng)復(fù)雜的規(guī)范。使用HTTPS保護(hù)用戶密碼
在進(jìn)一步討論OAuth2和JWT的實(shí)現(xiàn)之前,有必要說一下,兩種方案都需要SSL安全保護(hù),也就是對(duì)要傳輸?shù)臄?shù)據(jù)進(jìn)行加密編碼。
安全地傳輸用戶提供的私密信息,在任何一個(gè)安全的系統(tǒng)里都是必要的。否則任何人都可以通過侵入私人wifi,在用戶登錄的時(shí)候竊取用戶的用戶名和密碼等信息。一些重要的實(shí)施考慮
在做選擇之前,參考一下下邊提到的幾點(diǎn)。時(shí)間投入
OAuth2是一個(gè)安全框架,描述了在各種不同場(chǎng)景下,多個(gè)應(yīng)用之間的授權(quán)問題。有海量的資料需要學(xué)習(xí),要完全理解需要花費(fèi)大量時(shí)間。甚至對(duì)于一些有經(jīng)驗(yàn)的開發(fā)工程師來說,也會(huì)需要大概一個(gè)月的時(shí)間來深入理解OAuth2。這是個(gè)很大的時(shí)間投入。在公眾號(hào)后端架構(gòu)師后臺(tái)回復(fù)“架構(gòu)整潔”,獲取一份驚喜禮包。
相反,JWT是一個(gè)相對(duì)輕量級(jí)的概念。可能花一天時(shí)間深入學(xué)習(xí)一下標(biāo)準(zhǔn)規(guī)范,就可以很容易地開始具體實(shí)施。出現(xiàn)錯(cuò)誤的風(fēng)險(xiǎn)
OAuth2不像JWT一樣是一個(gè)嚴(yán)格的標(biāo)準(zhǔn)協(xié)議,因此在實(shí)施過程中更容易出錯(cuò)。盡管有很多現(xiàn)有的庫(kù),但是每個(gè)庫(kù)的成熟度也不盡相同,同樣很容易引入各種錯(cuò)誤。在常用的庫(kù)中也很容易發(fā)現(xiàn)一些安全漏洞。
當(dāng)然,如果有相當(dāng)成熟、強(qiáng)大的開發(fā)團(tuán)隊(duì)來持續(xù)OAuth2實(shí)施和維護(hù),可以一定成都上避免這些風(fēng)險(xiǎn)。社交登錄的好處
在很多情況下,使用用戶在大型社交網(wǎng)站的已有賬戶來認(rèn)證會(huì)方便。
如果期望你的用戶可以直接使用Facebook或者Gmail之類的賬戶,使用現(xiàn)有的庫(kù)會(huì)方便得多。結(jié)論做結(jié)論前,我們先來列舉一下
JWT和OAuth2的主要使用場(chǎng)景。JWT使用場(chǎng)景無狀態(tài)的分布式API
JWT的主要優(yōu)勢(shì)在于使用無狀態(tài)、可擴(kuò)展的方式處理應(yīng)用中的用戶會(huì)話。服務(wù)端可以通過內(nèi)嵌的聲明信息,很容易地獲取用戶的會(huì)話信息,而不需要去訪問用戶或會(huì)話的數(shù)據(jù)庫(kù)。在一個(gè)分布式的面向服務(wù)的框架中,這一點(diǎn)非常有用。
但是,如果系統(tǒng)中需要使用黑名單實(shí)現(xiàn)長(zhǎng)期有效的token刷新機(jī)制,這種無狀態(tài)的優(yōu)勢(shì)就不明顯了。優(yōu)勢(shì)快速開發(fā)不需要cookieJSON在移動(dòng)端的廣泛應(yīng)用不依賴于社交登錄相對(duì)簡(jiǎn)單的概念理解限制Token有長(zhǎng)度限制Token不能撤銷需要token有失效時(shí)間限制(exp)OAuth2使用場(chǎng)景在看來兩種比較有必要使用OAuth2的場(chǎng)景:外包認(rèn)證服務(wù)器
上邊已經(jīng)討論過,如果不介意API的使用依賴于外部的第三方認(rèn)證提供者,你可以簡(jiǎn)單地把認(rèn)證工作留給認(rèn)證服務(wù)商去做。
也就是常見的,去認(rèn)證服務(wù)商(比如facebook)那里注冊(cè)你的應(yīng)用,然后設(shè)置需要訪問的用戶信息,比如電子郵箱、姓名等。當(dāng)用戶訪問站點(diǎn)的注冊(cè)頁(yè)面時(shí),會(huì)看到連接到第三方提供商的入口。用戶點(diǎn)擊以后被重定向到對(duì)應(yīng)的認(rèn)證服務(wù)商網(wǎng)站,獲得用戶的授權(quán)后就可以訪問到需要的信息,然后重定向回來。優(yōu)勢(shì)快速開發(fā)實(shí)施代碼量小維護(hù)工作減少大型企業(yè)解決方案
如果設(shè)計(jì)的API要被不同的App使用,并且每個(gè)App使用的方式也不一樣,使用OAuth2是個(gè)不錯(cuò)的選擇。
考慮到工作量,可能需要單獨(dú)的團(tuán)隊(duì),針對(duì)各種應(yīng)用開發(fā)完善、靈活的安全策略。當(dāng)然需要的工作量也比較大!這一點(diǎn),OAuth2的也指出過:Tobeclear,OAuth2.0atthehandofadeveloperwithdeepunderstandingofwebsecuritywilllikelyresultisasecureimplementation.However,atthehandsofmostdevelopers–ashasbeentheexperiencefromthepasttwoyears–2.0islikelytoproduceinsecureimplementations.
hueniverse-OAuth2.0andtheRoadtoHell優(yōu)勢(shì)靈活的實(shí)現(xiàn)方式可以和JWT同時(shí)使用可針對(duì)不同應(yīng)用擴(kuò)展進(jìn)一步http://jwt.io-JWT官方網(wǎng)站,也可以查看到使用不同語(yǔ)言實(shí)現(xiàn)的庫(kù)的狀態(tài)。/2/OAuth2官方網(wǎng)站,也也可以查看到使用不同語(yǔ)言實(shí)現(xiàn)的庫(kù)的狀態(tài)。OAuth2tutorials-UsefuloverviewofhowOAuth2worksOauth2SpecissuesEranHammer’s(推進(jìn)OAuth標(biāo)準(zhǔn)的)viewsonwhatwentwrongwiththeOAuth2specprocess.Whateveryourownopinion,goodt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個(gè)人股份代持與公司治理協(xié)議4篇
- 2025年度個(gè)人聯(lián)保借款合同金融科技試點(diǎn)版2篇
- 2025年度個(gè)人房產(chǎn)買賣合同附件清單范本3篇
- 二零二五年度美容院消防安全管理與應(yīng)急預(yù)案合同4篇
- 2025年度個(gè)人教育資助貸款延期合同4篇
- 二零二五年度新型門店合伙人收益分配管理合同4篇
- 2025年度汽車租賃保險(xiǎn)及理賠服務(wù)合同范本3篇
- 2024年中職學(xué)校教師個(gè)人工作計(jì)劃
- 花崗巖貼面施工方案
- 軸承密封套課程設(shè)計(jì)
- 農(nóng)民工工資表格
- 【寒假預(yù)習(xí)】專題04 閱讀理解 20篇 集訓(xùn)-2025年人教版(PEP)六年級(jí)英語(yǔ)下冊(cè)寒假提前學(xué)(含答案)
- 2024年智能監(jiān)獄安防監(jiān)控工程合同3篇
- 幼兒園籃球課培訓(xùn)
- 統(tǒng)編版(2024新版)七年級(jí)《道德與法治》上冊(cè)第一單元《少年有夢(mèng)》單元測(cè)試卷(含答案)
- 100道20以內(nèi)的口算題共20份
- 高三完形填空專項(xiàng)訓(xùn)練單選(部分答案)
- 護(hù)理查房高鉀血癥
- 項(xiàng)目監(jiān)理策劃方案匯報(bào)
- 《職業(yè)培訓(xùn)師的培訓(xùn)》課件
- 建筑企業(yè)新年開工儀式方案
評(píng)論
0/150
提交評(píng)論