OAuth 2.0 流程
注意
此頁面假定您已經擁有身份提供者 (IdP),例如 Google、Entra ID(以前稱為 Azure AD)或 Okta,它處理身份驗證過程並返回訪問令牌。
瞭解如何透過 Web 瀏覽器讓使用者從您的擴充套件程式進行身份驗證,並使用 OAuth 2.0 返回到您的擴充套件程式。
在 OAuth 2.0 中,“授權型別”一詞是指應用程式獲取訪問令牌的方式。雖然 OAuth 2.0 定義了多種授權型別,但此頁面僅描述如何使用授權碼授權型別從您的擴充套件程式驗證使用者。
授權碼授權流程
授權碼授權型別供機密客戶端和公共客戶端使用,以將授權碼交換為訪問令牌。
使用者透過重定向 URL 返回到客戶端後,應用程式會從 URL 中獲取授權碼,並使用它來請求訪問令牌。


上圖顯示了
- Docker 擴充套件要求使用者授權訪問其資料。
- 如果使用者授予訪問許可權,則擴充套件程式會從服務提供商請求訪問令牌,並將來自使用者的訪問授權和身份驗證詳細資訊傳遞給服務提供商以識別客戶端。
- 服務提供商然後驗證這些詳細資訊並返回訪問令牌。
- 擴充套件程式使用訪問令牌向服務提供商請求使用者資料。
OAuth 2.0 術語
- Auth URL:用於 API 提供商授權伺服器的端點,用於檢索授權碼。
- 重定向 URI:客戶端應用程式回撥 URL,在身份驗證後重定向到此 URL。這必須在 API 提供商處註冊。
使用者輸入使用者名稱和密碼後,即可成功進行身份驗證。
開啟瀏覽器頁面以驗證使用者
從擴充套件程式 UI 中,您可以提供一個按鈕,當選擇該按鈕時,會在瀏覽器中開啟一個新視窗以驗證使用者。
使用 ddClient.host.openExternal API 在瀏覽器中開啟 Auth URL。例如
window.ddClient.openExternal("https://authorization-server.com/authorize?
response_type=code
&client_id=T70hJ3ls5VTYG8ylX3CZsfIu
&redirect_uri=${REDIRECT_URI});
獲取授權碼和訪問令牌
您可以透過將 docker-desktop://dashboard/extension-tab?extensionId=awesome/my-extension
作為您正在使用的 OAuth 應用程式中的 redirect_uri
列出,並將授權碼連線為查詢引數來從擴充套件程式 UI 中獲取授權碼。然後,擴充套件程式 UI 程式碼將能夠讀取相應的程式碼查詢引數。
重要
使用此功能需要 Docker Desktop 中的擴充套件程式 SDK 0.3.3。您需要確保在 映象標籤 中使用
com.docker.desktop.extension.api.version
設定的擴充套件程式所需的 SDK 版本高於 0.3.3。
授權
在此步驟中,使用者會在瀏覽器中輸入其憑據。授權完成後,使用者將被重定向回您的擴充套件程式使用者介面,並且擴充套件程式 UI 程式碼可以消耗作為 URL 中查詢引數的一部分的授權碼。
交換授權碼
接下來,您需要將授權碼交換為訪問令牌。
擴充套件程式必須向 0Auth 授權伺服器傳送帶有以下引數的 POST
請求
POST https://authorization-server.com/token
&client_id=T70hJ3ls5VTYG8ylX3CZsfIu
&client_secret=YABbyHQShPeO1T3NDQZP8q5m3Jpb_UPNmIzqhLDCScSnRyVG
&redirect_uri=${REDIRECT_URI}
&code=N949tDLuf9ai_DaOKyuFBXStCNMQzuQbtC1QbvLv-AXqPJ_f
注意
在此示例中,客戶端憑據包含在
POST
查詢引數中。OAuth 授權伺服器可能要求將憑據作為 HTTP 基本身份驗證標頭髮送,或者可能支援不同的格式。有關詳細資訊,請參閱您的 OAuth 提供商文件。
儲存訪問令牌
Docker Extensions SDK 沒有提供專門用於儲存金鑰的機制。
強烈建議您使用外部儲存源來儲存訪問令牌。
注意
使用者介面本地儲存在擴充套件程式之間是隔離的(一個擴充套件程式無法訪問另一個擴充套件程式的本地儲存),並且當用戶解除安裝擴充套件程式時,每個擴充套件程式的本地儲存都會被刪除。
下一步
瞭解如何 釋出和分發您的擴充套件程式