驗證

注意

本頁假設您已擁有身分識別提供者 (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 中取得授權碼,並使用它來請求存取權杖。

Flow for OAuth 2.0

上圖顯示:

  • 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) 在各個擴充功能之間是隔離的(一個擴充功能無法存取另一個擴充功能的本機儲存),且當使用者解除安裝擴充功能時,該擴充功能的本機儲存會被刪除。

接下來

了解如何發布與散布您的擴充功能

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.