基於 JWT 的身分驗證

基於 JWT 的身分驗證僅適用於 ProEnterprise 方案(包括自架和 Metabase Cloud)。

您可以使用 JSON Web Tokens (JWT) 將 Metabase 連接到您的身分提供者,以驗證人員身分。

身分驗證流程

Metabase 支援兩種可用於 JWT 的身分驗證流程

  • 授權碼流程
  • 具備 PKCE 的授權碼流程

Metabase 的身分驗證流程是仿效 OAuth 2.0 的自訂工作流程。您可以搭配 PKCE 使用身分驗證流程,以納入隨需產生的隨機金鑰。

目前,Metabase 唯一支援的演算法是 HS256 (HMAC + SHA-256)。

基於 JWT 的 SSO 與 Metabase 互動的典型流程

假設您的網站是 localhost,在連接埠 3000 上提供服務

  1. 人員嘗試檢視問題,例如 https://127.0.0.1:3000/question/1-superb-question
  2. 如果人員未登入,Metabase 會將他們重新導向至 https://127.0.0.1:3000/auth/sso
  3. Metabase 保留原始 /question/1-superb-question URI,將人員重新導向至 SSO 提供者(身分驗證應用程式)。
  4. 人員使用基本表單登入。
  5. 如果成功登入,您的身分驗證應用程式應向您的 Metabase 端點發出 GET 請求,其中包含權杖和「返回」URI: https://127.0.0.1:3000/auth/sso?jwt=TOKEN_GOES_HERE&return_to=/question/1-superb-question
  6. Metabase 驗證 JSON Web Token、讓人員登入,然後將人員重新導向至其原始目的地 /question/1-superb-question

啟用 JWT 身分驗證

導覽至管理區域的「管理」>「設定」區段,然後按一下「身分驗證」索引標籤。按一下此頁面 JWT 區段中的「設定」按鈕,您就會看到此表單

JWT form

以下是各項設定的詳細說明

JWT 身分提供者 URI: 這是 Metabase 將重新導向登入請求的位置。也就是說,這是您的使用者前往透過您的身分提供者登入的位置。

JWT 簽署金鑰使用的字串: 用於植入私密金鑰的字串,以驗證 JWT 訊息。Metabase 和身分驗證應用程式都應具有相同的 JWT 簽署金鑰。

使用者屬性組態(選用)

您可以填寫這些額外設定,將使用者屬性傳遞至 Metabase。

  • 電子郵件屬性: 擷取每個 JWT 使用者電子郵件地址的金鑰。
  • 名字屬性: 擷取每個 JWT 使用者名字的金鑰。
  • 姓氏屬性: 如果您猜到這是擷取每個 JWT 使用者姓氏的金鑰,那麼您一直都很專心。

您可以將其他使用者屬性作為金鑰/值組新增至您的 JWT,以將這些屬性傳送至 Metabase。這些屬性會在每次登入時同步。

設定群組對應

您可以使用您的 JWT 將 Metabase 使用者指派給自訂群組。

  1. 將群組新增至您的 JWT: groups: ["group_name"]
  2. 在 Metabase 中,前往管理面板並切換至「設定 > 身分驗證」索引標籤。
  3. 按一下 JWT 下方的「設定」按鈕。
  4. 在「群組架構」下方,開啟「同步群組成員資格」切換開關
  5. 按一下「新增對應」並新增 JWT 群組的名稱。
  6. 在顯示的列中,按一下下拉式選單以選取應對應到的 Metabase 群組。 Metabase JWT 群組對應
  7. 針對您想要對應的每個群組重複此步驟。

或者,您可以使用 環境變數 MB_JWT_GROUP_MAPPINGS 定義 JWT 和 Metabase 群組之間的對應。它接受 JSON 物件,其中金鑰是 JWT 群組,值是 Metabase 群組 ID 的列表。例如

MB_JWT_GROUP_MAPPINGS='{"extHR":[7], "extSales":[3,4]}'

其中 extHRextSales 是 JWT 群組的名稱,而 3、4、7 是 Metabase 群組的 ID。

您可以在群組頁面的 URL 中找到 Metabase 群組 ID,例如 http://your-metabase-url/admin/people/groups/<ID>。「所有使用者」群組的 ID 為 1,「管理員」群組的 ID 為 2。

您也可以使用 環境變數 MB_JWT_GROUP_SYNC 來開啟或關閉群組同步。

MB_JWT_GROUP_SYNC=true

使用 SSO 建立 Metabase 帳戶

付費方案 針對每個額外帳戶收費

新的 SSO 登入將自動建立新的 Metabase 帳戶。

使用外部身分提供者登入建立的 Metabase 帳戶沒有密碼。使用 IdP 註冊 Metabase 的人員必須繼續使用 IdP 登入 Metabase。

停用密碼登入

避免將自己鎖在 Metabase 之外! 此設定將套用至所有 Metabase 帳戶,包括您的 Metabase 管理員帳戶。我們建議您啟用密碼身分驗證。這將保護您在 SSO 發生任何問題時不會被鎖在 Metabase 之外。

若要要求人員使用 SSO 登入,請從「管理設定」>「身分驗證」停用密碼身分驗證。

Password disable

關於 Azure 的注意事項

如果您使用 Azure,您可能需要使用 Azure AD B2C。請查看他們的 權杖概觀

使用基於 JWT 的身分驗證的範例程式碼

您可以在 SSO 範例儲存庫中找到使用 JWT 身分驗證的範例程式碼。

閱讀其他 Metabase 版本的文件。