身份驗證

注意

本頁面假設您已經擁有一個身份提供商 (IdP),例如 Google、Entra ID(以前稱為 Azure AD)或 Okta,它處理身份驗證過程並返回訪問令牌。

瞭解如何透過網路瀏覽器讓使用者從您的擴充套件程式進行身份驗證,然後返回您的擴充套件程式。

在 OAuth 2.0 中,“授權型別”一詞指的是應用程式獲取訪問令牌的方式。儘管 OAuth 2.0 定義了多種授權型別,但本頁面僅描述如何使用授權碼授權型別從您的擴充套件程式授權使用者。

授權碼授予流程

授權碼授權型別由機密客戶端和公共客戶端用於將授權碼換取訪問令牌。

使用者透過重定向 URL 返回客戶端後,應用程式從 URL 獲取授權碼,並使用它請求訪問令牌。

Flow for OAuth 2.0

上圖顯示了

  • Docker 擴充套件請求使用者授權訪問其資料。
  • 如果使用者授予訪問許可權,擴充套件程式將向服務提供商請求訪問令牌,傳遞使用者的訪問授權和身份驗證詳細資訊以識別客戶端。
  • 服務提供商隨後驗證這些詳細資訊並返回訪問令牌。
  • 擴充套件程式使用訪問令牌向服務提供商請求使用者資料。

OAuth 2.0 術語

  • 身份驗證 URL:API 提供商授權伺服器的端點,用於檢索身份驗證程式碼。
  • 重定向 URI:身份驗證後重定向到的客戶端應用程式回撥 URL。此 URL 必須在 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});

獲取授權碼和訪問令牌

您可以透過在您使用的 OAuth 應用程式中將 docker-desktop://dashboard/extension-tab?extensionId=awesome/my-extension 列為 redirect_uri,並將授權碼作為查詢引數連線起來,從擴充套件程式 UI 獲取授權碼。然後,擴充套件程式 UI 程式碼將能夠讀取相應的程式碼查詢引數。

重要

使用此功能需要 Docker Desktop 中的擴充套件 SDK 0.3.3。您需要確保在 影像標籤 中設定的擴充套件所需 SDK 版本 com.docker.desktop.extension.api.version 高於 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 Basic Authentication 標頭髮送,或者可能支援不同的格式。有關詳細資訊,請參閱您的 OAuth 提供商文件。

儲存訪問令牌

Docker Extensions SDK 不提供特定的機制來儲存機密。

強烈建議您使用外部儲存源來儲存訪問令牌。

注意

使用者介面本地儲存在擴充套件程式之間是隔離的(一個擴充套件程式無法訪問另一個擴充套件程式的本地儲存),並且當用戶解除安裝擴充套件程式時,每個擴充套件程式的本地儲存都會被刪除。

接下來做什麼

瞭解如何釋出和分發您的擴充套件程式