JWT ベースフローを使用した組織の認証
継続的インテグレーション (CI) 環境は完全に自動化されており、Web ベースフローのユーザインタラクションはサポートされていません。これらの環境では、JSON Web トークン (JWT) を使用して組織を認証する必要があります。
JWT ベース認証フローでは、最初にデジタル証明書の生成と接続アプリケーションの作成を行う必要があります。次のタスクを 1 回のみ実行します。その後、CI 環境で実行されるスクリプトで組織を認証できるようになります。
Travis CI での JWT ベース認証の使用については、「Salesforce DX を使用した継続的インテグレーション」 Trailhead モジュールを参照してください。
-
独自の非公開鍵とデジタル証明書がない場合は、OpenSSL を使用して鍵と自己署名証明書を作成します。
このタスクでは、非公開鍵ファイルの名前が server.key で、デジタル証明書の名前が server.crt であることを前提としています。
-
接続アプリケーションを作成して Salesforce DX 用に設定します。
このタスクには、server.crt デジタル証明書ファイルのアップロードが含まれます。後で必要になるため、接続アプリケーションの保存時にコンシューマ鍵を書き留めておきます。
-
認証する組織が https://login.salesforce.com でホストされていない場合、プロジェクトの設定ファイル (sfdx-project.json) を更新します。
sfdcLoginUrl パラメータをこのログイン URL に設定します。他のログイン URL の例として、カスタムサブドメインや Sandbox 用の https://test.salesforce.com などが挙げられます。次に例を示します。
1"sfdcLoginUrl": "https://test.salesforce.com"または、force:auth:jwt:grant コマンドの --instanceurl パラメータを使用して URL を指定できます。この値によって、sfdx-project.json ファイルに指定したログイン URL が上書きされます。例については、次のステップを参照してください。
-
force:auth:jwt:grant CLI コマンドを実行します。
接続アプリケーションのクライアント ID (コンシューマ鍵とも呼ばれる)、非公開鍵ファイル (server.key) へのパス、および JWT 認証ユーザ名を指定します。Dev Hub 組織を認証するときに --setdefaultdevhubusername パラメータでデフォルトに設定します。次に例を示します。
1sfdx force:auth:jwt:grant --clientid 04580y4051234051 \ 2--jwtkeyfile /Users/jdoe/JWT/server.key --username jdoe@acdxgs0hub.org \ 3--setdefaultdevhubusername --setalias my-hub-org次の例は、--instanceurl パラメータを使用して、デフォルトの https://login.salesforce.com ではなく、https://test.salesforce.com でホストされている組織を指定する方法を示しています。1sfdx force:auth:jwt:grant --clientid 04580y4051234051 \ 2--jwtkeyfile /Users/jdoe/JWT/server.key --username jdoe@acdxgs0hub.org \ 3--instanceurl https://test.salesforce.comスクラッチ組織は、それに関連付けられている Dev Hub 組織の認証に使用したものと同じクライアント ID (コンシューマ鍵) と非公開鍵ファイルを使用して認証できます。--instanceurl パラメータを https://test.salesforce.com、--username パラメータをスクラッチ組織の作成後に表示される管理者ユーザに設定します。
スクラッチ組織の認証
JWT ベース認証フローをサポートするように Dev Hub を設定した場合、同じデジタル証明書と非公開鍵を使用して関連付けられたスクラッチ組織を認証できます。この方法は、スクラッチ組織を作成後に認証する必要があるものの、スクラッチ組織のアクセストークンへのアクセス権がない継続的インテグレーション (CI) システムで使用すると便利です。
このタスクには、次の前提条件があります。
- すでに JWT ベースフローを使用して Dev Hub 組織を認証した。
- Dev Hub 組織の認証時に使用した非公開鍵ファイルがアクセス可能で、/Users/jdoe/JWT/server.key にある。
- スクラッチ組織を作成済みで、その管理者ユーザ名 (例: test-wvkpnfm5z113@example.com) が手元にある。
-
Dev Hub 組織で作成した接続アプリケーションからコンシューマ鍵をコピーします。
- Dev Hub 組織にログインします。
- [設定] から、[クイック検索] ボックスに「アプリケーションマネージャ」と入力し、Lightning Experience アプリケーションマネージャに移動します。
-
アプリケーションリストで接続アプリケーションを見つけ、
をクリックし、[表示] を選択します。
- API ([OAuth 設定の有効化]) セクションで、コンシューマ鍵をクリップボードにコピーします。コンシューマ鍵は、3MVG9szVa2Rx_sqBb444p50Yj のように、数値と文字で構成される長い文字列です (この例は明確化のために短縮されています)。
-
force:auth:jwt:grant CLI コマンドを実行します。--clientid および --jwtkeyfile パラメータ値は、Dev Hub 組織を認証するためコマンドを実行したときと同じです。--username をスクラッチ組織の管理者ユーザ名、--instanceurl を https://test.salesforce.com に設定します。次に例を示します。
1sfdx force:auth:jwt:grant --clientid 3MVG9szVa2Rx_sqBb444p50Yj \ 2--jwtkeyfile /Users/jdoe/JWT/server.key --username test-wvkpnfm5z113@example.com \ 3--instanceurl https://test.salesforce.comユーザが承認されていないというエラーが発生した場合、スクラッチ組織情報がまだ https://test.salesforce.com に複製されていないことを示します。しばらく待ってから再試行してください。