共用方式為


使用 OAuth 授權使用者存取 Azure Databricks

本頁說明如何使用 Azure Databricks CLI 或 Azure Databricks REST API 時,授權使用者存取 Azure Databricks 資源。

Azure Databricks 使用 OAuth 2.0 做為 UI 外部使用者授權和驗證的慣用通訊協定。 整合客戶端驗證會將令牌產生和重新整理自動化。 當使用者登入並授與同意之後,OAuth 會發出 CLI、SDK 或其他工具的存取令牌,以代表使用者使用。 每個存取令牌都有效一小時,之後會自動要求新的令牌。

在此頁面中, 授權 是指使用 OAuth 授與 Azure Databricks 資源的存取權,而 驗證 是指透過存取權杖驗證認證。

如需更多高階詳細資料,請參閱 授權存取 Azure Databricks 資源

授權存取 Azure Databricks 資源的方式

Azure Databricks 支援兩種方式,以 OAuth 授權使用者帳戶:

  • 自動(推薦): 如果您使用支援的工具和 SDK,例如 Azure Databricks Terraform SDK,請使用 統一驗證 。 此方法會自動處理令牌產生和重新整理。

  • 手動: 產生程式代碼驗證器和挑戰,然後交換 OAuth 令牌。 如果您的工具不支援統一驗證,請使用此方法。 如需詳細資訊,請參閱 手動產生 OAuth U2M 存取令牌

具有統一身份驗證的自動授權

注意

設定授權之前,請檢閱您打算執行之工作區作業類型的 ACL 許可權,並確認您的帳戶具有所需的存取層級。 如需詳細資訊,請參閱 訪問控制清單

若要使用支援統一驗證的 Azure Databricks SDK 和工具執行 OAuth 授權,請在您的程式碼中整合下列專案:

環境

若要搭配工具或 SDK 使用特定 Azure Databricks 驗證類型的環境變數,請參閱 授權存取 Azure Databricks 資源 或工具或 SDK 的檔。 另請參閱 統一鑑別的環境變數和欄位, 以及 鑑別方法優先順序

針對帳戶層級作業,請設定下列環境變數:

  • DATABRICKS_HOST,設定為 Azure Databricks 帳戶主控台網址的值 (https://accounts.azuredatabricks.net)。
  • DATABRICKS_ACCOUNT_ID

針對工作區層級作業,請設定下列環境變數:

  • DATABRICKS_HOST,設定為 Azure Databricks 個別工作區網址,例如 https://adb-1234567890123456.7.azuredatabricks.net

個人資料

建立或識別 Azure Databricks 組態設定檔,並在您的檔案中包含下列欄位。 如果您建立了設定檔,請將占位符替換為適當的值。 若要搭配工具或 SDK 使用配置檔,請參閱 授權存取 Azure Databricks 資源 或工具或 SDK 的文件。 另請參閱 統一鑑別的環境變數和欄位, 以及 鑑別方法優先順序

針對帳戶層級作業,請在您的 .databrickscfg 檔案中設定下列值。 在此情況下,Azure Databricks 帳戶主控台網址為 https://accounts.azuredatabricks.net

[<some-unique-configuration-profile-name>]
host       = <account-console-url>
account_id = <account-id>

針對工作區層級作業,請在您的 .databrickscfg 檔案中設定下列值。 在此情況下,主機是 Azure Databricks 個別工作區網址,例如 https://adb-1234567890123456.7.azuredatabricks.net

[<some-unique-configuration-profile-name>]
host = <workspace-url>

CLI

針對 Azure Databricks CLI,使用下列選項執行 databricks auth login 命令:

然後依照網頁瀏覽器中的指示登入 Azure Databricks 帳戶或工作區。

如需詳細資訊,請參閱 使用 Databricks CLI 進行 OAuth 授權

VS Code

針對適用於 Visual Studio Code 的 Databricks 延伸模組,請遵循 為 Visual Studio Code 設定 Databricks 延伸模組的授權中的步驟。

連線

Databricks Connect 從 Databricks Runtime 13.1 開始,以及從 Databricks Runtime 13.3 LTS 開始的 Scala 支援 OAuth U2M 驗證。

針對 Databricks Connect,您可以:

  • 使用組態配置檔:如 [.databrickscfg] 索引標籤中所述,設定檔案中的工作區層級值。也請將 設定cluster_id為工作區實例 URL。
  • 使用環境變數: 設定與 [ 環境] 索引標籤上所示相同的值。也請將 設定 DATABRICKS_CLUSTER_ID 為工作區實例 URL。

的值 .databrickscfg 優先於環境變數。

若要使用這些設定初始化 Databricks Connect,請參閱 Databricks Connect 的計算組態

Terraform(星體改造技術)

套用 Terraform 設定之前,您必須根據組態使用工作區或帳戶作業,在 databricks auth login 索引標籤上執行其中一個命令。 這些命令會在使用者的主資料夾中產生並快取所需的 OAuth 令牌 .databricks/token-cache.json

帳戶層級作業

針對預設驗證:

provider "databricks" {
  alias = "account"
}

針對直接設定:

provider "databricks" {
  alias      = "account"
  host       = <retrieve-account-console-url>
  account_id = <retrieve-account-id>
}

retrieve- 佔位元取代為您自己的實作,以便從主控台或其他一些配置存儲中擷取值,例如 HashiCorp Vault。 另請參閱 保存庫提供者。 在此範例中,您可以將 設定 account_id 為 Azure Databricks 帳戶控制台 URL。

工作區層級作業

針對預設驗證:

  provider "databricks" {
  alias = "workspace"
}

針對直接設定:

provider "databricks" {
  alias = "workspace"
  host  = <retrieve-workspace-url>
}

Python

執行程式代碼之前,您必須使用工作區或帳戶作業選項,在 databricks auth login 索引標籤上執行 命令。 這些命令會在使用者的主資料夾中產生並快取所需的 OAuth 令牌 .databricks/token-cache.json

帳戶層級作業

針對預設驗證:

from databricks.sdk import AccountClient

a = AccountClient()
# ...

針對直接設定:

from databricks.sdk import AccountClient

a = AccountClient(
  host       = retrieveAccountConsoleUrl(),
  account_id = retrieveAccountId()
)
# ...

retrieve 佔位元取代為您自己的實作,以從控制台或其他一些組態存放區擷取值,例如 Azure KeyVault

工作區層級作業

針對預設驗證:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# ...

針對直接設定:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient(host = retrieve_workspace_url())
# ...

如需使用 Python 並實作 Databricks 統一驗證的 Azure Databricks 工具和 SDK 進行驗證的詳細資訊,請參閱:

JAVA

執行程式代碼之前,您必須使用工作區或帳戶作業選項,在 databricks auth login 索引標籤上執行 命令。 這些命令會在使用者的主資料夾中產生並快取所需的 OAuth 令牌 .databricks/token-cache.json

帳戶層級作業

針對預設驗證:

import com.databricks.sdk.AccountClient;
// ...
AccountClient a = new AccountClient();
// ...

針對直接設定:

import com.databricks.sdk.AccountClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
  .setHost(retrieveAccountConsoleUrl())
  .setAccountId(retrieveAccountId());
AccountClient a = new AccountClient(cfg);
// ...

retrieve 佔位元取代為您自己的實作,以從控制台或其他一些組態存放區擷取值,例如 Azure KeyVault

工作區層級作業

針對預設驗證:

import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...

針對直接設定:

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
  .setHost(retrieveWorkspaceUrl())
WorkspaceClient w = new WorkspaceClient(cfg);
// ...

如需使用 Java 並實作 Databricks 統一驗證的 Azure Databricks 工具和 SDK 進行授權和驗證的詳細資訊,請參閱:

Go

執行程式代碼之前,您必須使用工作區或帳戶作業選項,在 databricks auth login 索引標籤上執行 命令。 這些命令會在使用者的主資料夾中產生並快取所需的 OAuth 令牌 .databricks/token-cache.json

帳戶層級作業

針對預設驗證:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient())
// ...

針對直接設定:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
  Host:      retrieveAccountConsoleUrl(),
  AccountId: retrieveAccountId(),
}))
// ...

retrieve 佔位元取代為您自己的實作,以從控制台或其他一些組態存放區擷取值,例如 Azure KeyVault

工作區層級作業

針對預設驗證:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient())
// ...

針對直接設定:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
  Host: retrieveWorkspaceUrl(),
}))
// ...

如需使用 Go 和實作 Databricks 用戶端統一驗證的 Databricks 工具和 SDK 進行驗證的詳細資訊,請參閱使用 Azure Databricks 帳戶或工作區驗證適用於 Go 的 Databricks SDK

手動產生 OAuth U2M 存取令牌

本節適用於使用不支援 Databricks 統一驗證 標準的第三方工具或服務的使用者。 如果您需要手動產生、重新整理或使用適用於 OAuth U2M 驗證的 Azure Databricks OAuth 令牌,請遵循本節中的步驟。

步驟 1:產生程式代碼驗證程式和挑戰

若要手動產生 OAuth U2M 存取令牌,請從建立程式 碼驗證器和 相符的程式 碼挑戰開始。 您將使用步驟 2 中的挑戰來取得授權碼,以及步驟 3 中的驗證程式,以交換該程式代碼以取得存取令牌。

注意

遵循 OAuth PKCE 標準

  • 程式代碼驗證器是密碼編譯隨機字串(43-128 個字元),使用字元 A–Z、、a–z0–9-._~
  • 程式代碼挑戰是驗證工具的Base64 URL編碼SHA256哈希。

如需詳細資訊,請參閱授權要求

下列 Python 腳本會產生驗證程式和挑戰。 雖然您可以多次使用它們,但 Azure Databricks 建議您每次手動產生存取令牌時產生新的配對。

import hashlib, base64, secrets, string

# Allowed characters for the code verifier, per PKCE spec
allowed_chars = string.ascii_letters + string.digits + "-._~"

# Generate a secure code verifier (43–128 characters)
code_verifier = ''.join(secrets.choice(allowed_chars) for _ in range(64))

# Create the SHA256 hash of the code verifier
sha256_hash = hashlib.sha256(code_verifier.encode()).digest()

# Base64-url-encode the hash and strip any trailing '=' padding
code_challenge = base64.urlsafe_b64encode(sha256_hash).decode().rstrip("=")

# Output values
print(f"code_verifier:  {code_verifier}")
print(f"code_challenge: {code_challenge}")

步驟 2:產生授權碼

若要取得 Azure Databricks OAuth 存取令牌,您必須先產生 OAuth 授權碼。 此程序代碼會在使用后立即到期。 您可以在帳戶或工作區層級產生程式代碼:

  • 帳戶層級: 用來跨用戶可存取的所有工作區呼叫帳戶層級和工作區層級 REST API。
  • 工作區層級: 用來在單一工作區內呼叫 REST API。

注意

這些範例使用 databricks-cli 作為用戶端標識碼。 如果您未使用內建的 Azure Databricks 工具,例如 CLI 或 SDK,您必須啟用自定義 OAuth 應用程式,並在您的要求中使用它 client_id 。 請參閱 啟用或停用合作夥伴 OAuth 應用程式

產生帳戶層級授權碼

  1. 找出您的帳戶標識碼

  2. 在您的瀏覽器中,使用下列取代項目瀏覽至 URL:

    • <account-id>:您的 Azure Databricks 帳戶標識碼
    • <redirect-url>:本機重新導向 URI(例如 http://localhost:8020
    • <state>:驗證回應的任何純文字字串
    • <code-challenge>:步驟 1 的程式代碼挑戰
    https://accounts.azuredatabricks.net/oidc/accounts/<account-id>/v1/authorize
    ?client_id=databricks-cli
    &redirect_uri=<redirect-url>
    &response_type=code
    &state=<state>
    &code_challenge=<code-challenge>
    &code_challenge_method=S256
    &scope=all-apis+offline_access
    
  3. 當系統提示您存取您的 Azure Databricks 帳戶時,請登入。

  4. 從瀏覽器的網址列複製授權碼。 這是重新導向 URL 中的之後 code= 和之前 & 的值:

    http://localhost:8020/?code=dcod...7fe6&state=<state>
    

    確認 state 值符合您原本提供的內容。 如果沒有,請捨棄程序代碼。

  5. 繼續 產生帳戶層級存取令牌

產生工作區層級授權碼

  1. 在您的瀏覽器中,使用下列取代項目瀏覽至 URL:

    • <databricks-instance>:您的 <databricks-instance> Azure Databricks 工作區實例名稱,例如 adb-1234567890123456.7.azuredatabricks.net
    • <redirect-url>:本機重導 (例如 http://localhost:8020
    • <state>:回應驗證的任何純文本值
    • <code-challenge>:步驟 1 的挑戰字串
    https://<databricks-instance>/oidc/v1/authorize
    ?client_id=databricks-cli
    &redirect_uri=<redirect-url>
    &response_type=code
    &state=<state>
    &code_challenge=<code-challenge>
    &code_challenge_method=S256
    &scope=all-apis+offline_access
    
  2. 當系統提示您存取您的 Azure Databricks 帳戶時,請登入。

  3. 從瀏覽器的網址列複製授權碼。 這是重新導向 URL 中的之後 code= 和之前 & 的值:

    http://localhost:8020/?code=dcod...7fe6&state=<state>
    

    確認 state 值符合您原本提供的內容。 如果沒有,請捨棄程序代碼。

  4. 繼續 產生工作區層級存取令牌

步驟 3:交換存取令牌的授權碼

若要交換 Azure Databricks OAuth 存取令牌的授權碼,請選擇適當的層級:

  • 帳戶層級: 用來在用戶可存取的所有工作區中呼叫帳戶層級和工作區層級 REST API。
  • 工作區層級: 用來在單一工作區內呼叫 REST API。

產生帳戶層級存取權杖

  1. 用來 curl 交換 OAuth 存取令牌的帳戶層級授權碼。

    在要求中取代下列內容:

    • <account-id>:您的 Azure Databricks 帳戶標識碼
    • <redirect-url>:上一個步驟中的重新導向 URL
    • <code-verifier>:您稍早產生的驗證程式
    • <authorization-code>:上一個步驟中的授權碼
    curl --request POST \
    https://accounts.azuredatabricks.net/oidc/accounts/<account-id>/v1/token \
    --data "client_id=databricks-cli" \
    --data "grant_type=authorization_code" \
    --data "scope=all-apis offline_access" \
    --data "redirect_uri=<redirect-url>" \
    --data "code_verifier=<code-verifier>" \
    --data "code=<authorization-code>"
    
  2. 從回應中複製 access_token 值。 例如:

    {
      "access_token": "eyJr...Dkag",
      "refresh_token": "doau...f26e",
      "scope": "all-apis offline_access",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    令牌的有效期限為一小時。

  3. 繼續進行 步驟 4:呼叫 Azure Databricks REST API

產生工作區層級存取權杖

  1. 使用 curl 交換 OAuth 存取令牌的工作區層級授權碼。

    在要求中取代下列內容:

    • <databricks-instance>:您的 <databricks-instance> Azure Databricks 工作區實例名稱,例如 adb-1234567890123456.7.azuredatabricks.net
    • <redirect-url>:上一個步驟中的重新導向 URL
    • <code-verifier>:您稍早產生的驗證程式
    • <authorization-code>:工作區層級授權碼
    curl --request POST \
    https://<databricks-instance>/oidc/v1/token \
    --data "client_id=databricks-cli" \
    --data "grant_type=authorization_code" \
    --data "scope=all-apis offline_access" \
    --data "redirect_uri=<redirect-url>" \
    --data "code_verifier=<code-verifier>" \
    --data "code=<authorization-code>"
    
  2. 從回應中複製 access_token 值。 例如:

    {
      "access_token": "eyJr...Dkag",
      "refresh_token": "doau...f26e",
      "scope": "all-apis offline_access",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    令牌的有效期限為一小時。

步驟 4:呼叫 Azure Databricks REST API

根據存取令牌的範圍,使用存取令牌來呼叫帳戶層級或工作區層級 REST API。 若要呼叫帳戶層級 API,您的 Azure Databricks 用戶必須是帳戶管理員。

範例帳戶層級 REST API 要求

此範例使用 curlBearer 驗證來取得與帳戶關聯的所有工作區清單。

  • <oauth-access-token> 取代為帳戶層級 OAuth 存取權杖。
  • <account-id> 替換為您的帳戶識別碼。
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
"https://accounts.azuredatabricks.net/api/2.0/accounts/<account-id>/workspaces"

範例工作區層級 REST API 要求

此範例使用 curlBearer 驗證來列出指定工作區中的所有可用叢集。

  • <oauth-access-token> 取代為帳戶層級或工作區層級 OAuth 存取權杖。
  • <databricks-instance> 取代為 Azure Databricks 工作區執行個體名稱,例如 adb-1234567890123456.7.azuredatabricks.net
export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
"https://<databricks-instance>/api/2.0/clusters/list"