
CData ServiceNow Drivers はさまざまな認証方式に対応していますが、その中でも OAuthJWT(OAuth 2.0 JWT Bearer Grant) はパスワード不要でサーバー間通信を安全に実現できる強力な選択肢です。証明書ベースの署名付き JWT を ServiceNow に送信してアクセストークンを取得する仕組みで、ヘッドレス環境やバッチ処理・ETL ジョブなどの自動化シナリオに最適です。本記事では、ServiceNow 側の設定から CData ドライバーの接続文字列構成まで、一連の手順をステップバイステップで解説します。
OAuthJWT 認証の仕組み
通常の OAuth 認証はブラウザを介したインタラクティブな操作(認可画面の表示・ユーザー同意)が必要ですが、OAuthJWT では代わりに 署名済み JSON Web Token(JWT) を ServiceNow のトークンエンドポイントに直接送信し、アクセストークンを取得します。
認証フローは以下の通りです。リフレッシュトークンは発行されないため、アクセストークンの有効期限が切れた場合は再度 JWT を送信してトークンを取得します。CData ドライバーはこの処理を自動で行います。

設定手順
1. RSA キーペアと自己署名証明書を生成する
ServiceNow が JWT の署名を検証するために、RSA 公開鍵(X.509 証明書)を事前にインスタンスへ登録する必要があります。openssl を使って PKCS#8 形式の秘密鍵と自己署名証明書を生成します。
まず PKCS#8 形式の秘密鍵を生成します。実行するとパスフレーズの入力を求められます。
openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8
次に公開鍵証明書(X.509)を生成します。openssl.cnf が見つからないエラーが出る場合は、作業フォルダに以下の内容で openssl.cnf を作成してから実行してください。
[req]
distinguished_name = req_distinguished_name
[req_distinguished_name]
# Windows の場合は環境変数で cnf を指定
set OPENSSL_CONF=C:\path\to\openssl.cnf
openssl req -new -x509 -key rsa_key.p8 -out public_cert.pem -days 365 ^
-subj "/CN=CData ServiceNow Client/O=YourCompany/C=JP"
# Linux / macOS の場合
openssl req -new -x509 -key rsa_key.p8 -out public_cert.pem -days 365 \
-subj "/CN=CData ServiceNow Client/O=YourCompany/C=JP"
2. ServiceNow に公開鍵証明書を登録する
ServiceNow の Navigator で System Definition > Certificates に移動し、新しいレコードを作成します。
フィールド | 値 |
|---|
Name | cdata_servicenow_client(任意) |
Format | PEM |
Type | Trust Store Cert |
PEM Certificate | public_cert.pem の内容を貼り付け
|

3. ServiceNow に JWT API エンドポイントを作成する
Navigator で System OAuth > Application Registry に移動し、New をクリックします。表示される選択肢から Create an OAuth JWT API endpoint for external clients を選択します。
以下のフィールドを入力・設定します。
フィールド | 設定値 |
|---|
Name | CData JDBC Client(任意) |
Active | チェックを入れる |
User Field | Email(JWT の sub クレームと照合するフィールド) |
Enable JTI Verification | 必要に応じてチェックを外す(開発・テスト時は OFF 推奨) |
保存後、レコードの OAuth Entity Scopes 関連リストから useraccount スコープを追加します。このスコープがないと認証ユーザーのコンテキストでトークンが発行されず、データアクセスに失敗する場合があります。

フォームを保存すると Client ID と Client Secret が自動生成されます。これらは後の接続文字列設定で使用するので、必ずメモしておいてください。

4. JWT Verifier Maps を設定する
Application Registry レコードの下部にある関連リスト JWT Verifier Maps から New をクリックして新しいマッピングを追加します。
新規作成フォームで以下を入力します。
フィールド | 設定値 |
|---|
Name | CData JDBC Client(任意) |
Oauth jwt | Application Registry のレコード名(自動入力または検索して選択) |
Sys Certificate | 手順 2 で作成した証明書レコード |

以上でServiceNow側の設定は完了です。
5. CData ServiceNow Drivers の接続文字列を設定する
それでは実際にドライバーから接続する方法を説明します。CData ドライバーの接続 URL に以下のプロパティを設定します。
jdbc:servicenow:AuthScheme=OAuthJWT;
Url=https://[your-instance].service-now.com;
OAuthClientId=[Client ID(手順3で取得)];
OAuthClientSecret=[Client Secret(手順3で取得)];
OAuthJWTCert=[rsa_key.p8 のパス];
OAuthJWTCertType=PEMKEY_FILE;
OAuthJWTCertPassword=[rsa_key.p8 生成時のパスフレーズ];
OAuthJWTIssuer=[Client ID(手順3で取得)];
OAuthJWTSubject=[ServiceNow 認証ユーザーのメールアドレス];
各プロパティの説明は以下の通りです。
プロパティ | 説明 |
|---|
AuthScheme
| OAuthJWT を指定
|
Url
| ServiceNow インスタンスのベース URL |
OAuthClientId
| Application Registry で生成された Client ID |
OAuthClientSecret
| Application Registry で生成された Client Secret |
OAuthJWTCert
| PKCS#8 秘密鍵ファイル(rsa_key.p8)のフルパス |
OAuthJWTCertType
| PEMKEY_FILE を指定(PEM 形式の秘密鍵ファイル)
|
OAuthJWTCertPassword
| rsa_key.p8 生成時に設定したパスフレーズ
|
OAuthJWTIssuer
| JWT の iss クレーム。通常は Client ID と同じ値 |
OAuthJWTSubject
| JWT の sub クレーム。ServiceNow ユーザーのメールアドレス |
Java コードからの接続例(CData ServiceNow JDBD Driverを使用):
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class ServiceNowOAuthJWT {
public static void main(String[] args) throws Exception {
Class.forName("cdata.jdbc.servicenow.ServiceNowDriver");
String url = "jdbc:servicenow:"
+ "AuthScheme=OAuthJWT;"
+ "Url=https://[your-instance].service-now.com;"
+ "OAuthClientId=[your_client_id];"
+ "OAuthClientSecret=[your_client_secret];"
+ "OAuthJWTCert=/path/to/rsa_key.p8;"
+ "OAuthJWTCertType=PEMKEY_FILE;"
+ "OAuthJWTCertPassword=[your_passphrase];"
+ "OAuthJWTIssuer=[your_client_id];"
+ "[email protected];";
try (Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT number, short_description, state FROM incident LIMIT 10")) {
while (rs.next()) {
System.out.println(rs.getString("number") + " | "
+ rs.getString("short_description") + " | "
+ rs.getString("state"));
}
}
}
}
まとめ
CData ServiceNow Drivers の OAuthJWT 認証を使うことで、パスワードや対話的なブラウザ操作なしにサーバー間で安全に ServiceNow データへアクセスできます。ETL ジョブ・データパイプライン・バックエンドサービスなど、自動化が求められる環境に特に適した認証方式ですでの、これらのツールからServiceNow ドライバーをご使用の際はぜひこの方式をご検討ください。
関連リンク