この記事では、Salesforce で OAuth アクセストークンとリフレッシュトークンを取得する方法について記述しています。
接続アプリケーションの作成
まずは Salesforce で接続アプリケーションを作成します。
「設定」→「アプリケーションマネージャ」から、「新規接続アプリケーション」をクリックします。

基本情報を入力した上で、「OAuth 設定の有効化」を ON にして OAuth 設定を入力します。
今回はとりあえずアクセストークンを取得したいだけなのでコールバックURLはてきとうに。
また、リフレッシュトークンも取得したいので OAuth 範囲に「いつでも要求を実行 (refresh_token, offline_access) 」を含めておきます。

接続アプリケーションを作成したら、コンシューマ鍵とコンシューマの秘密を確認しておきます(後で使います)。
アプリの参照画面で、「コンシューマの詳細を管理」ボタンをクリックすると確認できます。

認証フローについて
アクセストークンを取得する方法として、「ユーザ名パスワードフロー」と「OAuth 2.0 Web サーバフロー」があるのですが、この記事では「OAuth 2.0 Web サーバフロー」について記述します。
「ユーザ名パスワードフロー」は cURL のみでアクセストークンを取得できるので手軽ではあるのですが、
- 要求にログイン情報を含めるためセキュリティ的なリスクがある
- リフレッシュトークンを取得できない
などのデメリットがあるため実用的ではないと思います。
OAuth 2.0 Web サーバフロー
認証コードの取得
ブラウザで以下のURLを入力します。
- 私のドメインは、「設定」→「私のドメイン」から確認できます
- 接続アプリケーションのリダイレクトURLはエンコードしてください(例:https://localhost → https:%2F%2Flocalhost)
https://["私のドメイン"の値]/services/oauth2/authorize?
client_id=[接続アプリケーションのコンシューマ鍵の値]&
redirect_uri=[接続アプリケーションのリダイレクトURLの値]&
response_type=code
すると「アクセスを許可しますか?」という画面になるので許可します。

許可すると、リダイレクトされてURLが
[リダイレクトURL]/?code=[認証コード]
という形になっていると思います。
これで認証コードが取得できました。

アクセストークンの取得
取得した認証コードを使用して、アクセストークンを取得します。
私は cURL を使って以下のように取得しましたが、同様の形式で HTTP POSTリクエストができれば、やり方は何でも良いです。
- 認証コードはデコードして下さい(最後の %3D%3D の部分を == に変えるだけで良いと思います)
curl -v https://["私のドメイン"の値]/services/oauth2/token
-d 'grant_type=authorization_code'
-d 'code=[認証コードの値]'
-d 'client_id=[接続アプリケーションのコンシューマ鍵の値]'
-d 'client_secret=[接続アプリケーションのコンシューマの秘密の値]'
-d 'redirect_uri=[接続アプリケーションのリダイレクトURLの値]'
-H "Content-Type:application/x-www-form-urlencoded"
成功すると、以下のようなレスポンスを取得できます。
{
"access_token": ●●●,
"refresh_token": ▲▲▲,
...
}
これでアクセストークンとリフレッシュトークンを取得できました。
コメント