Salesforce の OAuth 2.0 JWT べアラートークンフロー (Bearer Token Flow) を使用する方法

2019年12月30日
投稿者:岩佐 孝浩
カテゴリ:Python, Salesforce タグ:
2880px-Salesforce_logo.svg

Salesforce の OAuth 2.0 JWT べアラートークンフロー (Bearer Token Flow) を使用する方法

鈴木商店の岩佐です。
Salesforce の OAuth 2.0 JWT べアラートークンフロー (Bearer Token Flow) を使用する必要がありましたので、備忘録として残します。

JWT認証用アプリケーション登録 (Salesforce)

設定 -> アプリケーション -> アプリケーションマネージャ、と辿り、新規接続アプリケーションを選択します。
salesforce-jwt-auth-app-1


以下を設定して下さい。
・OAuth設定の有効化
 ・ON
・コールバックURL
 ・任意の値。今回は、例として挙げられている、https://login.salesforce.com/services/oauth2/callback とします。
・デジタル署名を使用
 ・ON
 ・証明書ファイル(RSA SHA256)
・選択したOAuth範囲
 ・「ユーザに代わっていつでも要求を実行」(必須)
 ・その他の使用したい範囲

証明書として自己署名証明書を使用する場合、以下で作成できます。

salesforce-jwt-auth-app-2


設定 -> アプリケーション -> 接続アプリケーション -> 接続アプリケーションを管理する、と辿り、先ほど登録したアプリケーションの編集画面を開きます。
salesforce-jwt-auth-app-3


デフォルトは、「許可されているユーザ」として「すべてのユーザは自己承認可能」が設定されています。
今回は、「管理者が承認したユーザは事前承認済み」を指定します。
salesforce-jwt-auth-app-4


プロファイルに許可したいユーザを追加します。
salesforce-jwt-auth-app-5

JWT認証用アプリケーション (Python 3.x)

JWT仕様

重要なポイントは以下のとおりです。(詳細は公式ページを参照して下さい)

・署名生成アルゴリズム
 ・RS256
・ペイロード
 ・aud: https://test.salesforce.com or https://login.salesforce.com
 ・iss: 接続アプリケーションのコンシューマ鍵
 ・sub: Account ID
 ・exp: Unix timestamp

Python 3.x Sample Code

JWT生成のために、PyJWT を使用しました。
事前に pip install pyjwt でインストールしておいて下さい。
(JWT仕様を満たすのであれば、何でも構いません)

400 Error (user hasn’t approved this consumer) が発生する場合

接続アプリケーションの登録時に、「許可されているユーザ」として「すべてのユーザは自己承認可能」を設定した場合、事前に以下のURLで承認を実施して下さい。(事前に一度だけで構いません)
https://test.salesforce.com/services/oauth2/authorize?client_id={{接続アプリケーションのコンシューマ鍵}}&redirect_uri={{接続アプリケーションのリダイレクトURL}}&response_type=token

[参考]
OAuth 2.0 JWT べアラートークンフロー | サーバによるトークンの確認

JWT OAuth 2.0 ベアラートークンフロー要求は、更新トークンを含むユーザの以前のすべての承認を確認します。一致する承認が見つかった場合、Salesforce は承認された範囲の値を組み合わせます。次に、Salesforce はアクセストークンを発行します。更新トークンまたは承認された使用可能な範囲を含んでいた以前の承認が見つからない場合、要求は未認証として失敗します。

Salesforce JWT User Hasn’t Approved This Consumer (Again)

事前に実施しておかないと、以下の 400 Error となります。

以上、お役に立てれば幸いです。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です