はじめに
HULFT SquareからSnowflakeのAPIを呼び出す際に必要なOAuth認証の設定について備忘録です。
準備したもの
・Snowflake セキュリティ統合
・HULFT Square コネクション
手順
1.[Snowflake]OAuthのセキュリティ統合を作成
以下ドキュメントを参考にしました。
参考:カスタムクライアント用のSnowflake OAuth の構成
--OAuth統合を作成
CREATE or replace SECURITY INTEGRATION "oauth_sec"
TYPE = OAUTH
ENABLED = TRUE
OAUTH_CLIENT = CUSTOM
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
OAUTH_REDIRECT_URI = 'https://app.square.hulft.com/connections/oauth2/callback'
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
OAUTH_REFRESH_TOKEN_VALIDITY = 86400;
項目 | 設定内容 | メモ |
---|---|---|
name | セキュリティ統合の名前 | 大文字小文字が区別される。小文字にしたい場合は「"」で囲む |
TYPE | OAUTH | 統合のタイプ |
ENABLED | TRUE | 外部との連携を制御 |
OAUTH_CLIENT | CUSTOM | 今回はHULFT Squareを使用するのでカスタム |
OAUTH_CLIENT_TYPE | CONFIDENTIAL | HULFT Squareは機密クライアント |
OAUTH_REDIRECT_URI | 'https://app.square.hulft.com/connections/oauth2/callback' |
認証後にリダイレクトされるURI |
OAUTH_ISSUE_REFRESH_TOKENS | TRUE | アクセストークンの有効期限が切れたときに更新するか |
OAUTH_REFRESH_TOKEN_VALIDITY | 更新トークンの有効期間(秒) | 定期的に更新トークンを失効させる |
今回はこちらで作成しました。
他にも特定のロールをブロックする等の設定も可能です。
2.[HULFT Square]OAuth認証のコネクションを作成
3.[Snowflake]セキュリティ統合の情報を取得
HULFT Squareにセキュリティ統合の情報を渡します。
- クライアントID
- クライアントシークレット
- 認可エンドポイント
- トークンエンドポイント
3-1.[Snowflake]セキュリティ統合の情報を取得
クライアントシークレット以外は以下SQLクエリを実行し取得します。
- クライアントID
- 認可エンドポイント
- トークンエンドポイント
DESCRIBE INTEGRATION "セキュリティ統合の名前";
注意
セキュリティ統合の名前は大文字小文字を区別します。
「"」無しの小文字で作成した場合は大文字になります。
-
クライアントID
「OAUTH_CLIENT_ID」 の値を入力してください。 -
認可エンドポイント
「OAUTH_AUTHORIZATION_ENDPOINT」 の値を入力してください。
<SnowflakeアカウントURL>/oauth/authorize
- トークンエンドポイント
「OAUTH_TOKEN_ENDPOINT」 の値を入力してください。
<SnowflakeアカウントURL>/oauth/token-request
3-2.[Snowflake]セキュリティ統合の情報を取得
クライアントシークレットは以下SQLクエリを実行し取得します。
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS( 'セキュリティ統合の名前' )
- クライアントシークレット
「OAUTH_CLIENT_SECRET の値を入力してください。
4.[HULFT Square]リフレッシュトークンを発行
値を入力し終えたら 「リフレッシュトークンを発行」 を押下します。
Snowflakeのログイン画面に遷移するので、ログイン情報を入力しサインインします。
ここで注意です。
ユーザ名/パスワードが正しいが「invalid consent request」のエラーになる場合、ロールの確認をして下さい。
検証アカウントではロールを意識することが少なく見落としており詰まりました💦
サインインに成功するとトークンが発行されます。
プロファイルを選択し完了です。
最後に
OAuth認証について勉強する良いきっかけをもらいました!
誰かの参考になれば幸いです。