ローカルアプリケーション用の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';
Snowflake OAuth 統合の構成¶
組み込み SNOWFLAKE$LOCAL_APPLICATION セキュリティ統合はシステムによって所有されていますが、セキュリティ管理者(つまり、 SECURITYADMIN システムロールを付与されたユーザー)が構成できます。
セキュリティ管理者は、セキュリティ統合の次のパラメーターを構成できます。
パラメーター |
説明 |
|---|---|
|
統合を有効にするかどうかを制御します。統合が無効になっている場合、ローカルアプリケーションは別の認証方法を使用する必要があります。 |
|
認証サーバーがリフレッシュトークンを発行するかどうかを制御します。 |
|
リフレッシュトークンの有効期間を設定します。 |
|
認証サーバーが1回限りのリフレッシュトークンを発行するかどうかを制御します。 |
|
アクセストークンの有効期間を設定します。 |
たとえば、組み込みのセキュリティ統合を変更して、認証サーバーが1回限りのリフレッシュトークンの発行を開始するようにするには、次のコマンドを実行します。
USE ROLE SECURITYADMIN;
ALTER SECURITY INTEGRATION SNOWFLAKE$LOCAL_APPLICATION
SET OAUTH_SINGLE_USE_REFRESH_TOKENS_REQUIRED = TRUE;
これらのパラメーターの設定の詳細については、 ALTER SECURITY INTEGRATION をご参照ください。
ログイン頻度の制御¶
OAUTH_ISSUE_REFRESH_TOKENS = TRUE の場合、アプリケーションはリフレッシュトークンを使用して、ユーザーに再度ログインを求めることなく、新しいアクセストークンを取得することができます。ユーザーは、リフレッシュトークンの有効期限が OAUTH_REFRESH_TOKEN_VALIDITY パラメーターで指定された期間後に切れたときのみ、再認証する必要があります。
Snowflake OAuth を使用するためのローカルアプリケーションの設定¶
このセクションでは、開発者がSnowflake OAuth で認証するようにローカルアプリケーションを構成する必要がある詳細を説明します。次のタイプのローカルアプリケーションは、組み込みの統合を使用して認証できます。
PythonドライバーやSnowflake CLI などのSnowflakeクライアントを使用するローカルアプリケーション。Snowflakeクライアントを使用するアプリケーション をご参照ください。
Snowflakeクライアントを使用せずに、 OAuth 認証エンドポイントとトークンエンドポイントに対して直接 REST リクエストを行うローカルアプリケーション。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 |
接続文字列で |
Go |
v1.14.1 |
接続構成で |
JDBC |
v3.24.1 |
ドライバーの接続文字列で |
Node.js |
v2.1.0 |
接続オプションで |
ODBC |
v3.9.0 |
|
Python |
v3.16.0 |
|
Snowflake CLI |
v3.8.1 |
接続定義に |
SnowSQL |
v1.4.0 |
構成ファイルに |
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 統合があるため、この統合は複製されません。組み込み統合の構成は、各アカウントに固有です。