ローカルアプリケーション用のSnowflake OAuth の使用

Snowflake OAuth は、 OAuth 認証サーバーとしてのSnowflakeと、 OAuth 認証コードフローを使用してユーザーの代わりに認証するアプリケーションの間のインターフェースを定義する セキュリティ統合 を作成することで、実装されます。Snowflake OAuth は、アプリケーションがシークレットを保存したり管理したりする必要がなく、外部 OAuth のようなサードパーティのIDプロバイダーを構成する必要がないため、強力な認証オプションになります。

ローカルアプリケーション、つまり、デスクトップアプリケーションがSnowflake OAuth を使用する方法を簡素化するために、アカウントに SNOWFLAKE$LOCAL_APPLICATION という組み込みのセキュリティ統合が必要です。このセキュリティ統合はすでに存在するため、ローカルアプリケーションがPythonドライバーやSnowflake CLI などのSnowflakeクライアントを使用する場合、アプリケーションはクライアントのプロパティまたはパラメーターを設定することで、Snowflakeに対して認証できます。それ以上の設定は必要ありません。組み込みの統合により、Snowflakeクライアントを使用するのではなく、 OAuth エンドポイントを直接呼び出すローカルアプリケーションの設定が簡単になります。

管理者は SNOWFLAKE$LOCAL_APPLICATION 統合のパラメーターを変更して、 OAuth アクセストークンとリフレッシュトークンの有効期間を指定するなど、動作を調整します。

ローカルアプリケーション用のSnowflake OAuth には、次の追加の利点があります。

  • ユーザー作成のSnowflake OAuth 統合とは異なり、ロールセッション内の切り替えはサポートされて います

  • これは、現在ユーザー認証のためにのみパスワードを使用しているアプリケーションに対してそのまま代わりになります。Snowflakeは 単一要素パスワードを非推奨 にしているので、ローカルアプリケーション用のSnowflake OAuth は、多くのセットアップを必要とせずに、より安全な形式の認証を使用するための手段を提供します。

注釈

SNOWFLAKE$LOCAL_APPLICATION のセキュリティ統合はすべてのアカウントに徐々に展開されています。この組み込み統合がアカウントに存在するかどうかを確認するには、次のコマンドを実行します。

SHOW SECURITY INTEGRATION LIKE 'SNOWFLAKE$LOCAL_APPLICATION';
Copy

Snowflake OAuth 統合の構成

組み込み SNOWFLAKE$LOCAL_APPLICATION セキュリティ統合はシステムによって所有されていますが、セキュリティ管理者(つまり、 SECURITYADMIN システムロールを付与されたユーザー)が構成できます。

セキュリティ管理者は、セキュリティ統合の次のパラメーターを構成できます。

パラメーター

説明

ENABLED

統合を有効にするかどうかを制御します。統合が無効になっている場合、ローカルアプリケーションは別の認証方法を使用する必要があります。

OAUTH_ISSUE_REFRESH_TOKENS

認証サーバーがリフレッシュトークンを発行するかどうかを制御します。

OAUTH_REFRESH_TOKEN_VALIDITY

リフレッシュトークンの有効期間を設定します。

OAUTH_SINGLE_USE_REFRESH_TOKENS_REQUIRED

認証サーバーが1回限りのリフレッシュトークンを発行するかどうかを制御します。

OAUTH_ACCESS_TOKEN_VALIDITY

アクセストークンの有効期間を設定します。

たとえば、組み込みのセキュリティ統合を変更して、認証サーバーが1回限りのリフレッシュトークンの発行を開始するようにするには、次のコマンドを実行します。

USE ROLE SECURITYADMIN;

ALTER SECURITY INTEGRATION SNOWFLAKE$LOCAL_APPLICATION
  SET OAUTH_SINGLE_USE_REFRESH_TOKENS_REQUIRED = TRUE;
Copy

これらのパラメーターの設定の詳細については、 ALTER SECURITY INTEGRATION をご参照ください。

ログイン頻度の制御

OAUTH_ISSUE_REFRESH_TOKENS = TRUE の場合、アプリケーションはリフレッシュトークンを使用して、ユーザーに再度ログインを求めることなく、新しいアクセストークンを取得することができます。ユーザーは、リフレッシュトークンの有効期限が OAUTH_REFRESH_TOKEN_VALIDITY パラメーターで指定された期間後に切れたときのみ、再認証する必要があります。

Snowflake OAuth を使用するためのローカルアプリケーションの設定

このセクションでは、開発者がSnowflake OAuth で認証するようにローカルアプリケーションを構成する必要がある詳細を説明します。次のタイプのローカルアプリケーションは、組み込みの統合を使用して認証できます。

Snowflakeクライアントを使用するアプリケーション

ローカルアプリケーションがSnowflake ODBC ドライバーのようにSnowflakeクライアントを使用する場合、 authenticator 接続オプションを oauth_authorization_code に設定して、Snowflake OAuth を使用して認証できます。追加の開発作業は必要ありません。

前提条件

Snowflakeクライアントは、ローカルアプリケーション用のSnowflake OAuth を使用して、ユーザーのウェブブラウザーを開ける必要があります。このため、Snowflakeクライアントとそれを使用するローカルアプリケーションの両方をユーザーのマシンにインストールする必要があります。Snowflakeクライアントがサーバーで実行されるコードによって使用される場合、ローカルアプリケーション用のSnowflake OAuth は機能しません。

サポートされているクライアント

ローカルアプリケーションは、次のSnowflakeクライアントを使用してローカルアプリケーション用のSnowflake OAuth で認証できます。

クライアント

必要最小バージョン

必要な構成

.NET

v4.8.0

接続文字列で authenticator=oauth_authorization_code を設定します。

Go

v1.14.1

接続構成で authenticator=oauth_authorization_code を設定します。

JDBC

v3.24.1

ドライバーの接続文字列で authenticator=oauth_authorization_code を設定します。

Node.js

v2.1.0

接続オプションで authenticator: 'oauth_authorization_code' を設定します。

ODBC

v3.9.0

  • Linuxおよび macOS の場合、 odbc.ini ファイルで authenticator=oauth_authorization_code を設定します。

  • Windowsの場合、 ODBC データソース管理者ツールで、Snowflake用の DSN を編集し、認証方式を oauth_authorization_code に設定します。

Python

v3.16.0

AUTHENTICATOR=OAUTH_AUTHORIZATION_CODEsnowflake.connector.connect() 関数に渡します。

Snowflake CLI

v3.8.1

接続定義に authenticator = "OAUTH_AUTHORIZATION_CODE" オプションを追加します。

SnowSQL

v1.4.0

構成ファイルに authenticator = "OAUTH_AUTHORIZATION_CODE" パラメーターを追加します。

OAuth エンドポイントを直接呼び出すアプリケーション

Snowflakeの認証エンドポイントとトークンエンドポイントにリクエストを行うことで、ローカルアプリケーションはSnowflake OAuth を認証サーバーとして使用できます。Snowflakeクライアントを使用する必要はありません。アプリケーションは、Snowflakeの認証エンドポイントにリクエストを送信してユーザーを認証し、認証コードを受信してから、トークンエンドポイントにリクエストを送信してアクセストークン用のそのコードを交換します。

Snowflakeの認証エンドポイントとトークンエンドポイントに REST リクエストを行うことの詳細については、 OAuth エンドポイントを呼び出す をご参照ください。

リクエスト要件

認証エンドポイントとトークンエンドポイントに対するアプリケーションの REST リクエストは、以下の要件に準拠している必要があります。

  • 認証エンドポイントへのリクエストのリダイレクト URL は http://127.0.0.1[:port][/path] である必要があります。つまり、ローカルアプリケーションは、認証サーバーとしてのSnowflakeによって返される認証コードのループバックアドレスでリッスンする必要があります。

  • 認証およびトークンエンドポイントへのリクエストは、コード交換のための証明キー(PKCE)を実装する必要があります。詳細については、 コード交換の証明キー をご参照ください。

  • トークンエンドポイントを呼び出してアクセストークンの認証コードを交換する場合、アプリケーションは適切なクライアント ID およびクライアントシークレットを提供する必要があります。この要件は、これらのクライアント認証情報を送信する方法によって若干異なります。

    • リクエストヘッダーでクライアント認証情報を送信する場合、クライアント ID は LOCAL_APPLICATION で、クライアントシークレットは LOCAL_APPLICATION である必要があります。

    • POST 本文でクライアント認証情報を送信する場合、クライアント ID は LOCAL_APPLICATION である必要があります。組み込みの統合はローカルアプリケーションをパブリッククライアントとして構成するため、 POST 本文でクライアント ID を client_id=LOCAL_APPLICATION として提供する場合、クライアントシークレットは必要ありません。

使用上の注意

すべてのアカウントには SNOWFLAKE$LOCAL_APPLICATION 統合があるため、この統合は複製されません。組み込み統合の構成は、各アカウントに固有です。