JWT フローを使用した組織の認証
継続的インテグレーション (CI) 環境は完全に自動化されており、ブラウザーへログインする際のユーザーインタラクションはサポートされていません。これらの環境では、JWT フローを使用して組織を認証する必要があります。
JWT フローでは、JWT 要求に署名するためのデジタル証明書 (デジタル署名ともいう) が必要です。独自の証明書を使用するか、OpenSSL を使用して自己署名証明書を作成できます。
-
独自の非公開鍵とデジタル証明書がない場合は、OpenSSL を使用して鍵と自己署名証明書を作成できます。
このタスクでは、非公開鍵ファイルの名前が server.key で、デジタル証明書の名前が server.crt であることを前提としています。
-
接続アプリケーションを作成して Salesforce DX 用に設定します。
このタスクには、server.crt デジタル証明書ファイルのアップロードが含まれます。後で必要になるため、接続アプリケーションの保存時にコンシューマー鍵を書き留めておきます。
- ターミナル (macOS および Linux) またはコマンドプロンプト (Windows) を開きます。
-
org login jwt CLI コマンドを実行します。後から組織を参照しやすくするために、--alias フラグを使用することをお勧めします。
--client-id フラグで接続しているアプリケーションのコンシューマーキー、プライベート JWT キーファイル (server.key) および組織のユーザー名を指定します。次に例を示します。
1sf org login jwt --client-id 04580y4051234051 --jwt-key-file /Users/jdoe/JWT/server.key --username jdoe@myorg.com --alias my-hub-org--target-org フラグを受け取るコマンドに対して、組織をデフォルトにする場合には --set-default フラグを使用します。また、Dev Hub 組織を認証する場合には、-set-default-dev-hub フラグを使用します。この例については org login jwt コマンドを参照してください。
スクラッチ組織は、それに関連付けられている Dev Hub 組織の認証に使用したものと同じコンシューマーキーと非公開鍵ファイルを使用して認証できます。「JWT フローを使用したスクラッチ組織の認証」を参照してください。
組織へのログインに使用する URL がデフォルト (login.salesforce.com) でない場合は、プロジェクト設定ファイル (sfdx-project.json) を更新してください。sfdcLoginUrl オプションを [私のドメイン] の拡張ドメインのログイン URL に設定します。次に例を示します。
1"sfdcLoginUrl" : "https://MyDomainName.my.salesforce.com"この例は Sandbox 用です。
1"sfdcLoginUrl" : "https://MyDomainName--SandboxName.sandbox.my.salesforce.com"または、org login jwt コマンドの --instance-url フラグを使用して URL を指定できます。この値によって、sfdx-project.json ファイルに指定したログイン URL が上書きされます。次に例を示します。
1sf org login jwt --client-id 04580y4051234051 --jwt-key-file /Users/jdoe/JWT/server.key --username jdoe@myorg.com --alias my-hub-org --instance-url https://mydomain--mysandbox.sandbox.my.salesforce.comJWT フローを使用したスクラッチ組織の認証
org login jwt コマンドを使用して Dev Hub 組織を認証した場合、同じデジタル証明書と非公開鍵を使用して関連付けられたスクラッチ組織を認証できます。この方法は、スクラッチ組織を作成後に認証する必要があるものの、スクラッチ組織のアクセストークンへのアクセス権がない継続的インテグレーション (CI) システムで使用すると便利です。
開始する前に、次の前提条件を確認してください。
- すでに org login jwt コマンドを使用して Dev Hub 組織を認証している。
- Dev Hub 組織の認証時に使用した非公開鍵ファイルがアクセス可能で、/Users/jdoe/JWT/server.key にある。
- スクラッチ組織を作成済みで、その管理者ユーザー名 (例: test-wvkpnfm5z113@example.com) が手元にある。
- スクラッチ組織のインスタンスの URL がわかっている。この URL がわからない場合は、Dev Hub 組織に照会することで確認できます。次に例を示します。
1sf data query --target-org my-dev-hub --query "SELECT SignupUsername,LoginUrl FROM ScratchOrgInfo WHERE SignupUsername='test-wvkpnfm5z113@example.com'"
-
Dev Hub 組織で作成した接続アプリケーションからコンシューマー鍵をコピーします。
- Dev Hub 組織にログインします。
- [設定] から、[クイック検索] ボックスに「アプリケーションマネージャー」と入力し、Lightning Experience アプリケーションマネージャーに移動します。
-
アプリケーションリストで接続アプリケーションを見つけて、右側の
ドロップダウンメニューをクリックし、[表示] を選択します。
-
[API (OAuth 設定の有効化)] セクションで、[コンシューマーの詳細を管理] をクリックします。
本人確認を求められたら、E メールアドレスに自動送信された確認コードを入力して本人であることを確認します。
- コンシューマー鍵をクリップボードにコピーします。コンシューマー鍵は、3MVG9szVa2Rx_sqBb444p50Yj のように、数値と文字で構成される長い文字列です (この例は明確化のために短縮されています)。
- ターミナル (macOS および Linux) またはコマンドプロンプト (Windows) を開きます。
-
org login jwt CLI コマンドを実行します。--client-id および --jwt-key-file フラグ値は、Dev Hub 組織を認証するためコマンドを実行したときと同じです。--username にはスクラッチ組織の管理者ユーザーの名前を設定し、--instance-url には https://energy-enterprise-2539-dev-ed.scratch.my.salesforce.com のようなスクラッチ組織のインスタンス URL を指定します。次に例を示します。
1sf org login jwt --client-id 3MVG9szVa2Rx_sqBb444p50Yj \ 2--jwt-key-file /Users/jdoe/JWT/server.key --username test-wvkpnfm5z113@example.com \ 3--instance-url https://energy-enterprise-2539-dev-ed.scratch.my.salesforce.comユーザーが承認されていないというエラーが発生した場合、スクラッチ組織情報がまだ複製されていないことを示します。しばらく待ってから再試行してください。