---
schema_version: "1"
id: 218dd4f8b3e4c49d532ed5a926d9adc10bd3fea520990e27adb02d7b278e0a7c
title: 為 Snowflake 設定外部 OAuth：用戶端認證流程
collection: tableau
version: current
locale: zh-tw
portal_url: https://docs.salesforce.com/tableau/current/zh-tw/server-linux/config_oauth_snowflake_client_creds.md
canonical_url: https://help.tableau.com/current/server-linux/zh-tw/config_oauth_snowflake_client_creds.htm
source_site: help.tableau.com
content_type: documentation
content_hash: bde88508da8b2f9a422abd5adbd33f055fd189c5a7e17fade11444836867a115
description: Configure Azure AD OAuth and modern authentication for Azure and Microsoft connectors in Tableau Server.
---
[跳至主要內容](#main-content)

# 為 Snowflake 設定外部 OAuth：用戶端認證流程

OAuth 用戶端認證驗證可實現與 Snowflake 的機器對機器連線，

無需使用者互動。此方法非常適合於：

- 用於自動資料重新整理的服務帳戶
- 排程的擷取作業
- CI/CD 管道
- 需要內嵌認證的已發佈資料來源

與標準 OAuth（使用授權碼流程）不同，用戶端認證流程不會

提示使用者登入。相反，Tableau 會使用

用戶端 ID 和密碼直接向您的身分提供程式進行驗證。

**附註：**用戶端認證流程需要 Snowflake 的外部 OAuth 功能以及支援的身分提供程式。這與 Snowflake 的原生 OAuth 不同。

## 開始之前

要將 OAuth 用戶端認證用於 Snowflake，您需要：

| 需求 | 描述 |
| --- | --- |
| 身分提供程式 | 為用戶端認證授與設定的 Okta、Azure AD 或 Ping Federate |
| Snowflake 帳戶 | 具有 ACCOUNTADMIN 存取權限的 Enterprise 版本或更高版本 |
| OAuth 應用程式 | API 服務 (Okta)、應用程式註冊 (Azure AD) 或同等功能 |
| 自訂範圍 | Snowflake 角色指派的範圍（例如，「session:role:SYSADMIN」） |

## 設定身分提供程式

以下步驟使用 Okta 作為範例。對於其他提供者，請參閱其文件，以瞭解用戶端認證設定。

### 步驟 1：建立 API 服務應用程式

1. 登入 Okta 管理員主控台。
2. 前往 \*\***應用程式** > **應用程式**。
3. 選取 \*\***建立應用程式整合**。
4. 選擇 \*\***API 服務**\*\*，並選取 \*\***下一個**。
5. 輸入應用程式名稱（例如，`snowflake-tableau-service`）。
6. 選取**儲存**。
7. 複製**用戶端 ID** 和**用戶端密碼**。稍後您將需要這些值。

### 步驟 2：停用 DPoP（若已啟用）

必須為用戶端認證流程停用出示持有證明 (DPoP)。

1. 在應用程式設定中，前往**一般** > **用戶端認證**。
2. 清除**權杖請求中需要出示持有證明 (DPoP) 標頭**核取方塊。
3. 選取**儲存**。

### 步驟 3：新增自訂範圍

Snowflake 需要自訂範圍才能將角色指派給經過驗證的工作階段。

1. 前往**安全性** > **API** > **授權伺服器**。
2. 選取**預設**授權伺服器（或您的自訂伺服器）。
3. 選取**範圍**索引標籤，然後**新增範圍**。
4. 新增以下範圍：
    
    | 範圍名稱 | 描述 |
    | --- | --- |
    | Snowflake | Snowflake 的一般存取範圍 |
    | session:role:SYSADMIN | 指派 SYSADMIN 角色（根據您的角色進行調整） |
    
    **附註：**為服務帳戶所需的任何其他角色建立其他範圍。

### 步驟 4：設定存取原則

1. 選取**存取原則**索引標籤。
2. 選取現有原則或建立新原則。
3. 新增具有以下設定的規則：
    
    - **授與類型：**用戶端認證
    - **範圍：**任何範圍（或選取特定範圍）
4. 選取**建立規則**或**儲存**。

## 設定 Snowflake

以 ACCOUNTADMIN 身分在 Snowflake 中執行以下 SQL 陳述式。將預留位置值取代為您的設定。

### 步驟 1：建立外部 OAuth 整合

USE ROLE ACCOUNTADMIN;

CREATE OR REPLACE SECURITY INTEGRATION okta\_oauth\_integration
  TYPE = EXTERNAL\_OAUTH
  ENABLED = TRUE
  EXTERNAL\_OAUTH\_TYPE = OKTA
  EXTERNAL\_OAUTH\_ISSUER = 'https://<your-okta-domain>.okta.com/oauth2/default'
  EXTERNAL\_OAUTH\_JWS\_KEYS\_URL = 'https://<your-okta-domain>.okta.com/oauth2/
default/v1/keys'
  EXTERNAL\_OAUTH\_TOKEN\_USER\_MAPPING\_CLAIM = 'sub'
  EXTERNAL\_OAUTH\_SNOWFLAKE\_USER\_MAPPING\_ATTRIBUTE = 'login\_name'
  EXTERNAL\_OAUTH\_AUDIENCE\_LIST = ('api://default', 'snowflake')
EXTERNAL\_OAUTH\_ANY\_ROLE\_MODE = 'ENABLE';

| 參數 | 描述 |
| --- | --- |
| `EXTERNAL_OAUTH_TYPE` | 您的身分提供程式：`OKTA`、`AZURE` 或 `PING_FEDERATE` |
| `EXTERNAL_OAUTH_ISSUER` | 授權伺服器中的簽發者 URL |
| `EXTERNAL_OAUTH_JWS_KEYS_URL` | 用於權杖驗證的 JWKS 端點 |
| `EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLA IM` | 識別使用者的 JWT 宣告。對於 Okta，使用 `sub`。 |
| `EXTERNAL_OAUTH_ANY_ROLE_MODE` | 設定為 `ENABLE`，以允許透過範圍指派角色 |

### 步驟 2：建立服務使用者

建立一個 Snowflake 使用者，其 `LOGIN_NAME` 與 OAuth 用戶端 ID 相符。

CREATE USER IF NOT EXISTS service\_account\_user  
  LOGIN\_NAME = '<your-okta-client-id>'  
  DISPLAY\_NAME = 'OAuth Service Account'  
  MUST\_CHANGE\_PASSWORD = FALSE  
  DISABLED = FALSE;
  
\-- Grant role to the service user  
GRANT ROLE SYSADMIN TO USER service\_account\_user;
  
\-- Set the default role  
ALTER USER service\_account\_user SET DEFAULT\_ROLE = 'SYSADMIN';
  
\-- Grant warehouse access  
GRANT USAGE ON WAREHOUSE <your-warehouse> TO USER service\_account\_user;
  
\-- Grant database and schema access  
GRANT USAGE ON DATABASE <your-database> TO USER service\_account\_user;  
GRANT USAGE ON SCHEMA <your-database>.<your-schema> TO USER  
service\_account\_user;  
GRANT SELECT ON ALL TABLES IN SCHEMA <your-database>.<your-schema> TO USER  
service\_account\_user;

**重要提示：**`LOGIN_NAME` 必須與 OAuth 權杖中的 `sub` 宣告完全相符。對於 Okta API 服務應用程式，此為用戶端 ID。

## 連線自 Tableau Desktop

1. 在 Tableau Desktop 中，選取**連線** > **Snowflake**。
2. 輸入連線詳細資訊：
    
    | 欄位 | 值 |
    | --- | --- |
    | 伺服器 | 您的 Snowflake 帳戶 URL（例如，`account.snowflakecomputing.com`） |
    | 角色 | 要使用的角色（例如，`SYSADMIN`） |
    | 倉儲 | 您的 Snowflake 倉儲 |
    | 驗證 | OAuth 用戶端認證 |
3. 輸入 OAuth 設定：
    
    | 欄位 | 值 |
    | --- | --- |
    | OAuth 權杖請求 URL | `https://<your-okta-domain>.okta.com/oauth2/default/ v1/token` |
    | 使用者名稱 | 您的 OAuth 用戶端 ID |
    | 密碼 | 您的 OAuth 用戶端密碼 |
    | OAuth 範圍 | `snowflake session:role:SYSADMIN` |
    
    **附註：**OAuth 範圍必須包含為角色指派設定的任何自訂範圍。
4. 選取**「登入」**。

## 發佈到 Tableau Cloud 或 Tableau Server

發佈使用 OAuth 用戶端認證的工作簿或資料來源時：

1. 在**發佈**對話方塊中，選取**資料來源**旁的**編輯**。
2. 對於**驗證**，選取**內嵌密碼**。
3. 用戶端認證內嵌在已發佈內容中。

**重要提示：**與標準 OAuth 不同，用戶端認證被視為內嵌密碼。存取已發佈內容的使用者會使用服務帳戶認證，而不是他們自己的身分。

### 認證變換

OAuth 用戶端密碼變換時，請在 Tableau Cloud 上更新內嵌認證：

1. 登入 Tableau Cloud。
2. 瀏覽至已發佈資料來源。
3. 選取**連線**。
4. 使用新的用戶端密碼更新連線。

對於自動變換，請使用 Tableau REST API 以程式設計方式更新連線認證。

## 常見問題

### 何時應使用 OAuth 用戶端認證，而不是標準 OAuth？

需要無人參與的機器對機器驗證時，請使用用戶端認證。標準

OAuth 需要使用者互動來進行初始登入和定期重新驗證。用戶端認證

使用服務帳戶身分，並且不需要使用者互動。

### 我可以將用戶端認證與 Snowflake 的原生 OAuth 一起使用嗎？

不可以。Snowflake 的原生 OAuth 僅支援授權碼流程。用戶端認證需要具有支援的身分提供程式（Okta、Azure AD 或 Ping Federate）的外部 OAuth。

### 如何處理已發佈內容的密碼變換？

OAuth 用戶端密碼變換時，必須在 Tableau Cloud 中更新內嵌認證。可以透過 Tableau Cloud UI 手動更新，也可以使用 Tableau REST API 以程式設計方式更新。請考慮自動化此流程，作為密碼變換工作流程的一部分。

### 為何即使已啟用 EXTERNAL\_OAUTH\_ANY\_ROLE\_MODE，我的連線仍會失敗並出現角色錯誤？

Snowflake 需要 OAuth 權杖中的角色資訊。將自訂範圍（例如，`session:role:SYSADMIN`）新增到授權伺服器，並在從 Tableau 連線時將其包含在 OAuth 範圍欄位中。

## 疑難排解

| 錯誤訊息 | 原因 | 解決方案 |
| --- | --- | --- |
| 「使用者不存在或未經授權」 | Snowflake 使用者 `LOGIN_NAME` 與 OAuth 用戶端 ID 不相符 | 設定使用者的 `LOGIN_NAME`，以符合 `sub` 宣告（Okta 的用戶端 ID） |
| 「請求的角色未在存取權杖中列出」 | 權杖中缺少角色範圍 | 將 `session:role:<ROLE>` 範圍新增至授權伺服器，並將其包含在 OAuth 範圍中 |
| 「無效的 DPoP 證明」 | Okta 中已啟用 DPoP | 在 Okta 應用程式中停用「需要出示持有證明 (DPoP)」 |
| 「無效的範圍」 | 未設定自訂範圍 | 將所需範圍新增至授權伺服器；不包含 `openid` |
| 權杖驗證失敗 | JWKS URL 或簽發者不正確 | 驗證 `EXTERNAL_OAUTH_JWS_KEYS _URL` 和 `EXTERNAL_OAUTH_ISSUER` 是否與授權伺服器相符 |

## 另請參閱

- [在 Tableau Server 上為 Snowflake 連線設定 OAuth](https://help.tableau.com/current/server-linux/zh-tw/config_oauth_snowflake.htm) - 瞭解使用 Snowflake 的標準 OAuth 驗證。
- [外部 OAuth 安全性整合](https://docs.snowflake.com/en/user-guide/oauth-external-overview) - 用於設定外部 OAuth 提供者的 Snowflake 文件。
- [Okta 用戶端認證流程](https://developer.okta.com/docs/guides/implement-grant-type/clientcreds/main/) - 用於實作用戶端認證的 Okta 文件。
- [更新資料來源連線](https://help.tableau.com/current/api/rest_api/zh-tw/REST/rest_api_ref_data_sources.htm#update_data_source_connection) - 認證更新的 Tableau REST API 參考。