CI/CD サーバーやデータ連携基盤など、ブラウザを起動できないヘッドレス環境でも、CData JDBC Driver for Salesforce を使えば Salesforce に安全に接続できます。本記事では、OAuth 2.0 の PKCE(Proof Key for Code Exchange)拡張を利用した手動認証フローを解説しますGetAuthorizationUrl ストアドプロシージャと PKCEVerifier プロパティを組み合わせることでclient_secret なしでも高いセキュリティを維持しつつ、ヘッドレスマシン上での OAuth 認証を実現できます。
前提条件
- CData JDBC Driver for Salesforce がインストール済みであること
- Salesforce 組織に接続された 接続アプリケーション(Connected App) が作成済みであること
- 接続アプリケーションで OAuth PKCE が有効化されていること(デフォルトで有効)
- DBeaver や DbVisualizer など、JDBC 接続を実行できるツール(または Java コード)が利用できること
- 別途 ブラウザを開ける端末(手元の PC 等)が 1 台あること
OAuth PKCE とは
PKCE は、OAuth 2.0 Authorization Code Flow に対するセキュリティ拡張です。クライアントが code_verifier(乱数文字列)と、それを SHA-256 でハッシュ化した code_challenge をペアで生成し、認証サーバーとの間で検証します。通常の OAuth フローでは client_secret による認証が必要ですが、PKCE を利用することで client_secret を省略しても認可コードcode)の横取り攻撃を防止できます。これによりclient_secret を安全に保管できないヘッドレスサーバーや SPA などに適した認証フローとなります。CData JDBC Driver ではGetAuthorizationUrl ストアドプロシージャが code_verifier の生成と code_challenge の計算を内部で行い、取得した PKCEVerifier を接続プロパティとして保持する仕組みになっています。
設定手順
1. 接続アプリケーションで OAuth PKCE を有効化する
Salesforce の接続アプリケーション(Connected App)設定で、以下を確認・設定します。
- OAuth 設定を有効化: チェック済み
- PKCE 拡張を要求: チェック済み(下図参照)
- コールバック URL: http://localhost:33333 など(ヘッドレス環境では実際にリッスンしない URL でも可)
- OAuth スコープ: 必要なスコープを付与(例: api, refresh_token, offline_access)

2. AuthScheme=OAuthPKCE で初期接続する
ヘッドレスマシン(またはローカルの JDBC ツール)から、以下の接続文字列で初期接続します。このとき InitiateOAuth=OFF を設定することで、ドライバーが自動的にブラウザを開こうとするのを防ぎます。
jdbc:salesforce:AuthScheme=OAuthPKCE;
OAuthClientId=[YOUR_CLIENT_ID];
InitiateOAuth=OFF;
ポイント: AuthScheme=OAuthPKCE を設定することで、後続のストアドプロシージャが PKCE フローに対応した認証 URL と PKCEVerifier を返すようになります。
3. GetAuthorizationUrl ストアドプロシージャを実行して認証 URL と PKCEVerifier を取得する
接続後、以下の SQL を実行します。
EXEC GetOAuthAuthorizationUrl
CallbackUrl = 'http://localhost:33333',
GrantType = 'Code';
実行結果として、以下の 2 つの値が返されます。
列名 | 内容 |
AuthorizationUrl
| ブラウザで開く Salesforce の認証 URLcode_challenge 込み |
PKCEVerifier
| code_verifier の値(後の手順で必ず使用する
|
*PKCEVerifier の値は必ずメモしてください。** 次のステップで使用します。
4. ブラウザで認証 URL にアクセスしてコードを取得する
手順 3 で取得した AuthorizationUrl を、ブラウザが使える別の端末(手元の PC など)で開きます。
1. URL をブラウザのアドレスバーに貼り付けてアクセスします。
2. Salesforce のログイン画面が表示されるのでユーザー名・パスワードを入力します。
3. 接続アプリケーションへのアクセス許可を求める同意画面が表示されるので「許可」をクリックします。
4. 認証後、ブラウザはコールバック URL(例: http://localhost:33333/?code=XXXX&state=YYYY)にリダイレクトされます。
5. URL 中の code= に続く値(**認可コード**)をコピーします。

5. OAuthVerifier と PKCEVerifier を設定して本接続する
手順 3 で取得した PKCEVerifier と、手順 4 で取得した認可コードcode)を使って、以下の接続文字列でヘッドレスマシンから本接続します。
jdbc:salesforce:AuthScheme=OAuthPKCE;
OAuthClientId=[YOUR_CLIENT_ID];
InitiateOAuth=GETANDREFRESH;
OAuthVerifier=[手順4で取得したcode];
PKCEVerifier=[手順3で取得したPKCEVerifier];
OAuthSettingsLocation=/etc/cdata/salesforce_oauth.json;
プロパティ | 値 | 説明 |
AuthScheme
| OAuthPKCE
| PKCE フローを使用することを指定 |
OAuthClientId
| 接続アプリの Client ID | Salesforce の接続アプリケーションから取得 |
InitiateOAuth
| GETANDREFRESH
| 初回トークン取得と自動更新を有効化 |
OAuthVerifier
| 手順4の認可コード | code= 以降の値
|
PKCEVerifier
| 手順3の PKCEVerifier | ストアドプロシージャの戻り値 |
OAuthSettingsLocation
| 任意のファイルパス | 暗号化されたトークンの保存先 |
接続に成功すると、ドライバーが OAuthVerifier と PKCEVerifier を使って Salesforce のトークンエンドポイントとやり取りし、アクセストークンとリフレッシュトークンを取得します。取得したトークンは OAuthSettingsLocation に暗号化されて保存されます。
6. 2 回目以降の接続(自動トークン更新)
初回接続が成功すると、以降は OAuthVerifier と PKCEVerifier は不要ですOAuthSettingsLocation に保存されたリフレッシュトークンを使って自動更新されます。
jdbc:salesforce:AuthScheme=OAuthPKCE;
OAuthClientId=[YOUR_CLIENT_ID];
InitiateOAuth=REFRESH;
OAuthSettingsLocation=/etc/cdata/salesforce_oauth.json;
CI/CD パイプラインや定期バッチでは、この接続文字列を環境変数や Secret Manager に保存して利用することを推奨します。
まとめ
本記事では、CData JDBC Driver for Salesforce を使って、ブラウザを起動できないヘッドレスマシン上で OAuth PKCE 認証を行う手順を解説しましたGetAuthorizationUrl ストアドプロシージャが PKCEVerifier の生成を内部で処理してくれるため、PKCE の複雑な暗号処理を自前で実装する必要はありません。初回認証後は OAuthSettingsLocation によるトークン自動更新が有効になるため、以降の接続は接続文字列を変えるだけで継続的に利用できます。