oauth2.0协议流程_正确的工作流程:我应该使用哪个OAuth 2.0流程?
oauth2.0協(xié)議流程
什么是OAuth 2.0
OAuth 2.0是一個(gè)已被廣泛采用的委托授權(quán)框架,已經(jīng)存在了很多年,并且似乎已經(jīng)存在。 如果您不熟悉OAuth 2.0的基本概念,可以使用
川崎孝彥寫(xiě)的優(yōu)秀文章 。 這只是OAuth 2.0各方的簡(jiǎn)要提醒:
- 資源所有者–受保護(hù)資源的所有者,例如用戶
- 客戶端–想要訪問(wèn)受保護(hù)資源的應(yīng)用程序,例如服務(wù)器端Web應(yīng)用程序或單頁(yè)應(yīng)用程序(SPA)
- 授權(quán)服務(wù)器–發(fā)行令牌的服務(wù)器
- 資源服務(wù)器–管理資源所有者的受保護(hù)數(shù)據(jù)的服務(wù)器
讓我們?yōu)g覽每個(gè)OAuth 2.0流程并討論其用法。
客戶證書(shū)授予
這是最簡(jiǎn)單的流程。 它允許客戶端使用其客戶端ID和客戶端密鑰請(qǐng)求訪問(wèn)令牌。 兩者都安全地保存在客戶端并在授權(quán)服務(wù)器中注冊(cè)。
什么時(shí)候使用?
如您所見(jiàn),沒(méi)有用戶參與。 建議使用“客戶端憑據(jù)授予”來(lái)進(jìn)行計(jì)算機(jī)到計(jì)算機(jī)的授權(quán)。 通常,一個(gè)受信任的服務(wù)將調(diào)用另一個(gè)服務(wù)。
授權(quán)碼授予
最常用的流程,專門(mén)為可以維護(hù)其客戶端機(jī)密信息的服務(wù)器端應(yīng)用程序而設(shè)計(jì)。 這是基于重定向的流之一。
為什么我們需要其他授權(quán)碼?
為什么我們不能直接請(qǐng)求訪問(wèn)令牌? 為什么首先要引入授權(quán)碼? 事實(shí)證明,主要目標(biāo)是分離公開(kāi)給客戶和用戶代理的信息。 請(qǐng)注意,訪問(wèn)令牌根本不會(huì)通過(guò)瀏覽器。 從客戶端(服務(wù)器端應(yīng)用程序)使用
通過(guò)用戶代理轉(zhuǎn)發(fā)的授權(quán)碼。 瀏覽器有什么問(wèn)題? OAuth 2.0不需要客戶端服務(wù)器支持HTTPS。 因此,從技術(shù)上講,可能存在無(wú)法通過(guò)SSL重定向到客戶端服務(wù)器的問(wèn)題。 如果發(fā)生這種情況,則通過(guò)明文發(fā)送授權(quán)碼。 如果有人攔截了它,那么沒(méi)有Client Secret仍然沒(méi)有用。 但是,如果您直接通過(guò)HTTP發(fā)送訪問(wèn)令牌,則可能會(huì)遭到破壞。
什么時(shí)候使用?
如前所述,建議對(duì)服務(wù)器端Web應(yīng)用程序使用此流程。 但是,近年來(lái),這種流程的變體也已用于單頁(yè)和移動(dòng)應(yīng)用程序。
單頁(yè)應(yīng)用
對(duì)于單頁(yè)應(yīng)用程序,唯一的區(qū)別是客戶端(SPA)沒(méi)有客戶端密鑰。 由于SPA在瀏覽器中運(yùn)行,并且其源代碼是公開(kāi)的,因此無(wú)法在瀏覽器端對(duì)客戶端機(jī)密保密。 這就是為什么在上圖的第4步中,將授權(quán)代碼交換為訪問(wèn)令牌而不發(fā)送客戶端密鑰。
原生移動(dòng)應(yīng)用
與SPA類(lèi)似,本機(jī)移動(dòng)應(yīng)用程序被認(rèn)為是公共的,而不是機(jī)密的客戶端。 這就是客戶端機(jī)密不應(yīng)該存儲(chǔ)在移動(dòng)設(shè)備中(因此在請(qǐng)求訪問(wèn)令牌時(shí)不發(fā)送的原因)。 沒(méi)有在移動(dòng)設(shè)備中實(shí)現(xiàn)沒(méi)有客戶端密鑰的授權(quán)代碼流,可能會(huì)存在一些安全問(wèn)題。 這樣的問(wèn)題之一是,授權(quán)碼可能會(huì)被攻擊者攔截并交換為訪問(wèn)令牌。 為了減輕這種風(fēng)險(xiǎn),有一種稱為代碼交換證明密鑰(PKCE)的技術(shù)。 對(duì)于每個(gè)授權(quán)請(qǐng)求,客戶端都必須創(chuàng)建一個(gè)稱為Code Verifier的隨機(jī)密鑰。 授權(quán)代碼請(qǐng)求中包含其稱為Code Challenge的哈希版本。 授權(quán)服務(wù)器應(yīng)將此代碼質(zhì)詢與其生成的授權(quán)代碼相關(guān)聯(lián)。 以后,當(dāng)為訪問(wèn)令牌交換授權(quán)碼時(shí),客戶端將代碼驗(yàn)證程序作為查詢參數(shù)。 除了驗(yàn)證標(biāo)準(zhǔn)參數(shù)外,授權(quán)服務(wù)器還應(yīng)使用先前收到的Code Challenge驗(yàn)證Code Verifier。
此外, 當(dāng)前的最佳實(shí)踐是僅使用外部用戶代理(而不是嵌入式Web視圖)來(lái)發(fā)送對(duì)授權(quán)碼的請(qǐng)求。
隱性補(bǔ)助
它類(lèi)似于“授權(quán)代碼授予”,但完全跳過(guò)了“授權(quán)代碼”步驟。 客戶端直接請(qǐng)求訪問(wèn)令牌,不需要授權(quán)碼。 此外,不涉及“客戶機(jī)密”。 在隱式授予中,不使用刷新令牌。 重要的是要提到,訪問(wèn)令牌以散列片段的形式在3xx重定向中返回,并且永遠(yuǎn)不會(huì)從瀏覽器發(fā)送。
什么時(shí)候使用?
它最初設(shè)計(jì)為SPA的流程。 它依賴于瀏覽器,可能無(wú)法在其他環(huán)境中安全地實(shí)現(xiàn)。 但是,如前所述,對(duì)于SPA,近年來(lái),越來(lái)越多的組織已經(jīng)朝著沒(méi)有客戶機(jī)密而不是隱式流程的授權(quán)代碼流發(fā)展。
資源所有者密碼憑證授予
在此流程中,資源所有者將其憑據(jù)直接提交到客戶端應(yīng)用程序。 客戶端應(yīng)用程序使用該憑據(jù)直接將它們交換為訪問(wèn)令牌(以及可選的刷新令牌)。 與客戶端憑據(jù)類(lèi)似,它不是基于重定向的流程。
什么時(shí)候使用?
資源所有者和客戶端應(yīng)用程序之間是否高度信任。 建議僅在不可能進(jìn)行其他處理時(shí)才使用它。 現(xiàn)在,設(shè)備流擴(kuò)展可以涵蓋資源所有者密碼憑據(jù)授予的大多數(shù)原始用例。
設(shè)備流程
這是OAuth 2.0中新增的擴(kuò)展流,用于覆蓋設(shè)備具有Internet連接但沒(méi)有瀏覽器或輸入文字的輸入能力受限的情況,例如電視。
在此流程中,設(shè)備要求用戶使用瀏覽器(例如智能手機(jī))在設(shè)備上打開(kāi)特定的URL以便進(jìn)行授權(quán)。
摘要
這是設(shè)計(jì)用于給定場(chǎng)景的流程的快速摘要:
- 服務(wù)器到服務(wù)器:客戶端憑據(jù)流
- 服務(wù)器端應(yīng)用程序:授權(quán)代碼流
- SPA:沒(méi)有客戶端機(jī)密或隱式流的授權(quán)代碼流
- 移動(dòng)設(shè)備:PKCE的授權(quán)碼流
- 沒(méi)有瀏覽器的設(shè)備:設(shè)備流
翻譯自: https://www.javacodegeeks.com/2019/01/right-flow-job-oauth-2-0-flow-should-use.html
oauth2.0協(xié)議流程
總結(jié)
以上是生活随笔為你收集整理的oauth2.0协议流程_正确的工作流程:我应该使用哪个OAuth 2.0流程?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 云南:将实现充电站“县县全覆盖”、充电桩
- 下一篇: 单元测试junit参数_使用Junit参