驗證
注意本頁假設您已擁有身分識別提供者 (IdP),例如 Google、Entra ID (前身為 Azure AD) 或 Okta,該服務負責處理認證過程並回傳存取權杖。
了解如何讓使用者透過網頁瀏覽器使用 OAuth 2.0 從您的擴充功能進行認證,並返回您的擴充功能。
在 OAuth 2.0 中,「授權類型」(Grant type) 一詞是指應用程式取得存取權杖的方式。儘管 OAuth 2.0 定義了多種授權類型,但本頁僅說明如何從您的擴充功能中使用「授權碼」授權類型來授權使用者。
授權碼授權流程 (Authorization code grant flow)
「授權碼」授權類型由機密用戶端 (Confidential clients) 和公開用戶端 (Public clients) 用於將授權碼交換為存取權杖。
當使用者透過重新導向 URL (Redirect URL) 返回用戶端後,應用程式會從 URL 中取得授權碼,並使用它來請求存取權杖。

上圖顯示:
- Docker 擴充功能要求使用者授權存取其資料。
- 如果使用者授予存取權,擴充功能隨即向服務提供者請求存取權杖,並傳遞使用者的存取授權與識別用戶端的認證詳細資訊。
- 服務提供者接著會驗證這些詳細資訊並回傳存取權杖。
- 擴充功能使用存取權杖向服務提供者請求使用者資料。
OAuth 2.0 術語
- 認證 URL (Auth URL):API 提供者授權伺服器的端點,用於擷取認證碼。
- 重新導向 URI (Redirect URI):用戶端應用程式的回呼 URL,用於在認證後進行重新導向。此 URI 必須在 API 提供者處註冊。
一旦使用者輸入使用者名稱和密碼,即完成認證。
開啟瀏覽器頁面以認證使用者
您可以從擴充功能 UI 提供一個按鈕,點選後會在瀏覽器中開啟新視窗來認證使用者。
使用 ddClient.host.openExternal API 開啟瀏覽器至認證 URL。例如:
window.ddClient.openExternal("https://authorization-server.com/authorize?
response_type=code
&client_id=T70hJ3ls5VTYG8ylX3CZsfIu
&redirect_uri=${REDIRECT_URI});取得授權碼與存取權杖 (Access token)
您可以透過將 docker-desktop://dashboard/extension-tab?extensionId=awesome/my-extension 列為您所使用 OAuth 應用程式中的 redirect_uri,並將授權碼串接為查詢參數,從擴充功能 UI 取得授權碼。擴充功能 UI 程式碼隨後即可讀取對應的 code 查詢參數。
重要使用此功能需要 Docker Desktop 中的擴充功能 SDK 0.3.3 版本。您必須確保擴充功能所要求的 SDK 版本(在映像標籤中使用
com.docker.desktop.extension.api.version設定)高於 0.3.3。
授權
在此步驟中,使用者會在瀏覽器中輸入憑證。授權完成後,使用者會被重新導向回您的擴充功能使用者介面,擴充功能 UI 程式碼即可取用 URL 中作為查詢參數一部分的授權碼。
交換授權碼
接下來,您需要將授權碼交換為存取權杖。
擴充功能必須向 OAuth 授權伺服器傳送一個 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 Basic Authentication 標頭傳送憑證,或是支援其他格式。請參閱您的 OAuth 提供者文件以了解詳情。
儲存存取權杖
Docker 擴充功能 SDK 未提供儲存機密資訊 (Secrets) 的特定機制。
強烈建議您使用外部儲存來源來儲存存取權杖。
注意使用者介面的本機儲存 (Local Storage) 在各個擴充功能之間是隔離的(一個擴充功能無法存取另一個擴充功能的本機儲存),且當使用者解除安裝擴充功能時,該擴充功能的本機儲存會被刪除。
接下來
了解如何發布與散布您的擴充功能