2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Salesforceの指定ログイン機能を用いたOAuth2.0クライアント設定 - JWT Bearer Token Flow編

Last updated at Posted at 2023-03-17

SalesforceはOAuth2.0に対応し、サーバ(認可サーバ、リソースサーバ)としてもクライアントとしてノーコードで認証フローを実現できます。JWT Bearer Token Flowをサーバ側、クライアント側両方ともSalesforceで行った場合の設定等のサンプルを紹介します。

やっていること

クライアントをSalesforce A、認可サーバ、リソースサーバをSalesforce Bとします。Salesforce Aで指定ログイン機能の設定を行い、匿名APEXコードでSalesforce Bに認証し、Rest APIを実行できていることを確認します。

認可サーバ、リソースサーバとなるSalesforce Bの設定方法、はこちらで解説しています。

  • Rest APIをノーコードで呼び出す方法、
  • 認証フローをAuthorization Code Flow(Webサーバフロー)にする方法

は別記事で解説予定です。

手順

”2.認可サーバ(Salesforce B)へのクライアント証明書の登録”以外はすべて、クライアントであるSalesforce Aでの作業です。

1. クライアント証明書の作成

「設定」→「セキュリティ」→「証明書と鍵の管理」から、「自己署名証明書の作成」ボタンで証明書を作成します。表示ラベル、一意の名前は、適当に設定し(本記事では"myCert")、その他はデフォルト値をそのまま使用します。
スクリーンショット 2023-03-14 20.01.40.png

作成した証明書を選択し「証明書のダウンロード」ボタンで証明書をダウンロードします。
スクリーンショット 2023-03-14 20.02.13.png

2. 認可サーバ(Salesforce B)へのクライアント証明書の登録

認可サーバ側にダウンロードした証明書を登録します。(登録方法は別記事での解説予定)

3. 外部ログイン情報の設定

3.1. 外部ログイン情報の作成

外部ログイン情報は、認証サーバに関する設定です。
「設定」→「セキュリティ」→「指定ログイン情報」から、「外部ログイン情報」タブを選択、「新規」ボタンを押下し、外部ログイン情報を作成します。

設定項目 設定値 説明
表示ラベル JwtBearerExtCert(任意値) お好みの値を設定
名前 JwtBearerExtCert(任意値) お好みの値を設定
認証プロトコル OAuth2.0 OAuth2.0で認証するための設定
認証フロー種別 JWTベアラーフロー OAuth2.0のJWT Bearer Token Flowを利用するための設定
IDプロバイダURL https://login.salesforce.com/services/oauth2/token (認証サーバ指定値) トークンエンドポイントを設定。認証サーバがSandboxの場合は、https://test.salesforce.com/services/oauth2/token
証明書の署名 myCert 手順1で作成し、認証サーバに登録した証明書を指定

スクリーンショット 2023-03-14 20.06.10.png

3.2. JWTクレームの設定

作成した外部ログイン情報の下にある[JWTクレーム]の「編集」ボタンを押下し、以下3つのログイン情報を設定します。接続先の認証サーバにより設定は異なるので、その辺は読み替えて設定してください。

設定項目 設定値 説明
iss 3MVG9n_HvETG.... (認証サーバ指定値) Salesforce Bで接続したい接続アプリケーションのコンシューマキーを設定。右の値をそのまま設定しないように
sub testuser@cunning-impala-mqsqh.dev (認証サーバ指定値) Salesforce Bに登録されているRest API実行可能なユーザ名を指定。右の値をそのまま設定しないように
aud https://login.salesforce.com (認証サーバ指定値) 認証サーバを指定。認証サーバがSandbox場合は https://test.salesforce.com

スクリーンショット 2023-03-17 18.04.52.png

3.3. 権限セットの作成と割り当て

作成した外部ログイン情報を利用するユーザに割り当てる権限セットを作成します。本設定では"ExtCredAccess"としてます。
スクリーンショット 2023-03-17 18.10.38.png

作成した外部ログイン情報の下にある[権限セットの対応づけ]の[新規]ボタンを押下し、作成した権限セットを割り当てます。ID種別は「指定ユーザ」にします。
スクリーンショット 2023-03-17 18.37.53.png

4. 指定ログイン情報の設定

指定ログイン情報は、リソースサーバに関する設定です。
「設定」→「セキュリティ」→「指定ログイン情報」から、「指定ログイン情報」タブを選択、「新規」ボタンを押下し、指定ログイン情報を作成します。

設定項目 設定値 説明
表示ラベル SampleNmdCred (任意値) お好みの値を設定
名前 SampleNmdCred (任意値) お好みの値を設定
URL https://cunning-impala-mqswh-dev-ed.trailblaze.my.salesforce.com (リソースサーバ指定値) リソースサーバのエンドポイントを指定。リソースサーバであるSalesforce Bの「私のドメイン」を指定。
外部ログイン情報 JwtBearerExtCert 手順3.で作成した外部ログイン情報を設定

スクリーンショット 2023-03-17 18.40.33.png

5. 匿名APEXコードでのテスト

最初にログインしているユーザに作成した権限セット"ExtCredAccess"を割り当てておきます。
「右上のギアアイコン」→「開発者コンソール」で開発者コンソールを開き、「Debug」→「Open Anonymous Window」にて、以下テストコードをコピペして実行します。うまくいけば、通信しているようなログが出力されて正常終了します。

anonymous window
HttpRequest req = new HttpRequest();
req.setEndpoint('callout:SampleNmdCred/services/data/v57.0/');
req.setMethod('GET');
Http http = new Http();
HTTPResponse res = http.send(req);
System.debug(res.getBody());

スクリーンショット 2023-03-17 19.05.07.png
スクリーンショット 2023-03-17 19.07.29.png

参考情報

関連記事

今後もう少し追加する予定

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?