您的客戶是公開的嗎?

單頁應(yīng)用(SPA)、移動應(yīng)用和原生應(yīng)用都屬于公開應(yīng)用,終端用戶可以查看甚至可能修改應(yīng)用的源代碼。代碼中的任何敏感信息都可能暴露給惡意用戶。相比之下,服務(wù)器端(Web)應(yīng)用和桌面應(yīng)用屬于機密或私有應(yīng)用。機密客戶端可以使用客戶端認證方法,如客戶端密鑰和私鑰。

您的客戶使用的是重定向模型還是嵌入式模型?

重定向模型

如果您的 SPA 或本機應(yīng)用程序?qū)⑸矸蒡炞C請求重定向到 Okta 托管的登錄頁面,請使用帶有 PKCE 的授權(quán)碼流程。

嵌入式模型

如果您的應(yīng)用程序本身托管身份驗證流,請使用 Interaction Code 流。

客戶端是否有最終用戶?

一個在沒有直接終端用戶參與的服務(wù)器上運行的客戶端應(yīng)用可以被信任為能夠負責任地使用其自身的憑據(jù)。如果您的客戶端應(yīng)用僅進行機器到機器的交互,那么您應(yīng)該使用客戶端憑據(jù)流(Client Credentials Flow)。

您的應(yīng)用是否受到高度信任?

如果您既擁有某個應(yīng)用,又擁有該應(yīng)用所訪問的資源,那么這個應(yīng)用就是高可信度的。因為您對這兩者都擁有所有權(quán),所以您可以信任該應(yīng)用能夠妥善處理終端用戶的用戶名和密碼。在這種情況下,并且僅當其他認證流程不可行時,您可以使用資源所有者密碼憑據(jù)流程(Resource Owner Password Credentials Flow,簡稱資源密碼流)。但是,該流程不支持多因素身份驗證,因此請考慮使用其他替代方案,如授權(quán)碼流程

如果您的應(yīng)用程序不是高信任度,或者您想要利用多重身份驗證,則應(yīng)使用授權(quán)代碼流程。

具有 PKCE 流的授權(quán)代碼流

代碼交換的證明密鑰 (PKCE) 最初設(shè)計為保護移動應(yīng)用程序中的授權(quán)代碼流的擴展。但是,它能夠防止授權(quán)代碼注入并保持流程安全,因此非常適合各種類型的 OAuth 客戶端。Okta 建議您盡可能將授權(quán)代碼流程與 PKCE 一起用于 OAuth 客戶端。

該流程要求您的應(yīng)用生成一個加密隨機字符串,稱為代碼驗證程序。然后,對代碼驗證程序進行哈希處理以創(chuàng)建代碼質(zhì)詢,并且此質(zhì)詢與授權(quán)代碼請求一起傳遞。授權(quán)服務(wù)器使用授權(quán)碼進行響應(yīng),并將代碼質(zhì)詢與授權(quán)碼相關(guān)聯(lián)。

應(yīng)用程序收到授權(quán)碼后,它會在訪問令牌請求中發(fā)送授權(quán)碼和代碼驗證器。授權(quán)服務(wù)器使用先前商定的哈希算法重新計算驗證程序的質(zhì)詢。然后,授權(quán)服務(wù)器將挑戰(zhàn)碼與之前與授權(quán)碼關(guān)聯(lián)的挑戰(zhàn)碼進行比較。如果兩個挑戰(zhàn)碼和驗證器相匹配,授權(quán)服務(wù)器就知道這兩個請求是由同一個客戶端發(fā)送的。

顯示使用 PKCE 的授權(quán)代碼流的資源所有者、授權(quán)服務(wù)器和資源服務(wù)器之間的交互的序列圖

交互代碼流

交互代碼流程擴展了 OAuth 2.0 和 OIDC 標準。它要求客戶端將客戶端 ID 和 PKCE 參數(shù)傳遞給 Okta,以確保流的安全。用戶可以用最少的信息啟動請求,依靠客戶端來促進與 Okta 的交互以驗證用戶身份。

注意:交互代碼流僅在 Identity Engine 組織中可用。

顯示交互代碼流的資源所有者、授權(quán)服務(wù)器和資源服務(wù)器之間的交互的序列圖

資源所有者密碼流

資源所有者密碼流適用于以下使用案例:

它最常見于為在線服務(wù)制作的第一方客戶端中,比如與Facebook服務(wù)交互的Facebook客戶端應(yīng)用。它不需要像授權(quán)碼流程或隱式流程那樣進行重定向,而是只涉及對端點的一次經(jīng)過身份驗證的調(diào)用。/token

顯示資源所有者、授權(quán)服務(wù)器和資源服務(wù)器之間的交互的序列圖 Resource Owner Password 流

客戶端憑據(jù)流

客戶端憑據(jù)流適用于沒有最終用戶的服務(wù)器端(機密)客戶端應(yīng)用程序。通常,這意味著機器對機器的通信。該應(yīng)用需要是服務(wù)器端應(yīng)用,因為它必須能夠安全地保管客戶端密鑰。由于憑證是硬編碼的,因此實際的終端用戶無法使用它。該流程涉及向端點發(fā)送一個經(jīng)過身份驗證的請求,該請求將返回一個訪問令牌。/token

注意:客戶端憑證流不支持刷新令牌。

顯示 Client Credentials 流的資源所有者、授權(quán)服務(wù)器和資源服務(wù)器之間交互的序列圖

SAML 2.0 斷言流

此流程適用于無需在授權(quán)服務(wù)器上直接獲取用戶批準,而是利用現(xiàn)有信任關(guān)系的客戶端應(yīng)用。它允許客戶端應(yīng)用從SAML身份提供者(Identity Provider)處獲得一個有效且已簽名的SAML斷言,并以此斷言來從OAuth授權(quán)服務(wù)器處獲取一個OAuth訪問令牌。例如,當您希望從僅支持委托權(quán)限而無需提示用戶輸入憑據(jù)的API中檢索數(shù)據(jù)時,此流程就非常有用。

要使用 SAML 2.0 斷言作為授權(quán)授予,客戶端需要向身份提供商發(fā)出 SAML 請求。然后,身份提供商在響應(yīng)中發(fā)送回 SAML 2.0 斷言。然后,客戶端請求具有授權(quán)類型的訪問令牌并包含該參數(shù)。該參數(shù)的值是 Base64 編碼的 SAML 2.0 斷言。在該請求中,您只能發(fā)送一個 SAML 斷言。urn:ietf:params:oauth:grant-type:saml2-bearerassertionassertion

顯示 SAML 2.0 斷言流的序列圖,該流顯示資源所有者、授權(quán)服務(wù)器、身份提供者和客戶端之間的交互”

隱式流

注意:隱式流是僅用于不支持 PKCE 的 SPA 的舊流。

隱式流程(Implicit Flow)旨在為不支持跨源資源共享(CORS)的基于瀏覽器的應(yīng)用而設(shè)計。此外,它還適用于缺乏現(xiàn)代加密API且無法保護客戶端密鑰的基于瀏覽器的應(yīng)用。在此流程中,客戶端不會向端點發(fā)送請求,而是在從端點重定向的過程中接收訪問令牌。客戶端必須能夠與資源所有者的用戶代理交互,并接收來自授權(quán)服務(wù)器的傳入請求(通過重定向)。/token/authorize

注意:由于 Implicit 流始終適用于不太受信任的客戶端,因此它不支持刷新令牌。

重要:對于在支持 Web Crypto for PKCE 的現(xiàn)代瀏覽器中運行的單頁應(yīng)用程序 (SPA),Okta 建議將授權(quán)代碼流程與 PKCE 一起使用。使用此流而不是 Implicit 流以獲得最大的安全性。如果需要支持較舊的瀏覽器,隱式流將提供功能性解決方案。

顯示隱式授權(quán)流的資源所有者、授權(quán)服務(wù)器和資源服務(wù)器之間交互的序列圖

原文來源:https://developer.okta.com/docs/concepts/oauth-openid/

上一篇:

Password Manager(密碼管理)產(chǎn)品背后的API機制:OAuth、加密接口、瀏覽器擴展集成

下一篇:

HIP-1217熱點:DeFi鏡像節(jié)點API實時gRPC流式余額校驗實戰(zhàn)
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費