驗證

**注意**

此頁面假設您已經擁有身分識別提供者 (IdP),例如 Google、Entra ID (先前稱為 Azure AD) 或 Okta,可以處理驗證流程並傳回存取權杖。

瞭解如何讓使用者透過網頁瀏覽器使用 OAuth 2.0 從您的擴充功能進行驗證,然後返回您的擴充功能。

在 OAuth 2.0 中,「授予類型」一詞是指應用程式取得存取權杖的方式。雖然 OAuth 2.0 定義了多種授予類型,但此頁面僅說明如何使用授權碼授予類型從您的擴充功能授權使用者。

授權碼授予流程

機密和公開用戶端使用授權碼授予類型來交換授權碼以取得存取權杖。

使用者透過重新導向 URL 返回用戶端後,應用程式會從 URL 取得授權碼,並使用它來請求存取權杖。

Flow for OAuth 2.0

上圖顯示:

  • Docker 擴充功能要求使用者授權存取其資料。
  • 如果使用者授予存取權,擴充功能接著會向服務提供者請求存取權杖,並傳遞使用者的存取授予和驗證詳細資料以識別用戶端。
  • 然後,服務提供者會驗證這些詳細資料並傳回存取權杖。
  • 擴充功能使用存取權杖向服務提供者請求使用者資料。

OAuth 2.0 術語

  • 驗證網址:API 提供者授權伺服器的端點,用於擷取驗證碼。
  • 重新導向 URI:驗證後要重新導向的用戶端應用程式回呼 URL。這必須向 API 提供者註冊。

使用者輸入使用者名稱和密碼後,即會成功通過驗證。

開啟瀏覽器頁面以驗證使用者

您可以從擴充功能 UI 提供一個按鈕,選取後會在瀏覽器中開啟新視窗以驗證使用者。

使用 ddClient.host.openExternal API 開啟瀏覽器至驗證網址。例如:

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 擴充功能 SDK 未提供儲存密鑰的特定機制。

強烈建議您使用外部儲存來源來儲存存取權杖。

**注意**

使用者介面本地儲存區在擴充功能之間是隔離的(一個擴充功能無法存取另一個擴充功能的本地儲存區),並且每個擴充功能的本地儲存區都會在使用者解除安裝擴充功能時被刪除。

後續步驟

瞭解如何發佈和散佈您的擴充功能