#
ドキュメント

Document

自分のための備忘録です。

OAuth 2.0 Web サーバフロー 認証

ブラウザとREST Client(Postman)を使って、Salesforce APIのOAuth 2.0 Web サーバフローを説明。

Ref.

手順

  1. Salesforce側接続アプリケーションを作成
  2. リフレッシュトークン、アクセストークンの設定
  3. 接続アプリケーションのコンシューマ鍵client_id)とコンシューマの秘密(client_secret)を使って認証(アクセストークンとリフレッシュトークンを取得)
  4. リフレッシュトークンを使ったアクセストークンの取得(Salesforceでこの処理を更新トークン取得と呼ぶ)
  5. 取得したアクセストークンを使用してデータを操作

Salesforce側:接続アプリケーションを作成

OAuth 範囲は以下2つあればよい(フルアクセスは必要ないはず)

  • データへのアクセスと管理(api)
  • ユーザーに代わっていつでも要求を実行(refresh_token, offline_access)

図:アプリケーションマネージャー>編集> 接続アプリケーションを管理

接続アプリケーションを管理する___Salesforce

リフレッシュトークン、アクセストークンの設定

リフレッシュトークン(有効期限)設定

有効期限のないリフレッシュトークンをAPIで使用するには、以下を設定する。

  • アプリケーションマネージャー>編集>選択した OAuth 範囲>ユーザーに代わっていつでも要求を実行(refresh_token, offline_access)を選択
  • リフレッシュトークンの設定は接続アプリケーション>接続アプリケーションを管理する>編集>更新トークンポリシー更新トークンは取り消されるまで有効を選択

アクセストークン(有効期限)設定

アクセストークンの有効期限は以下順序で決定される。

  1. 接続アプリケーション>接続アプリケーションを管理する>編集>セッションポリシータイムアウト値
  2. ↑でタイムアウトが指定されていないときは、ユーザープロファイルセッションタイムアウトの開始条件の値

図:接続アプリケーション>接続アプリケーションを管理する>編集

Lightning_Experience___Salesforce

図:ユーザープロファイル

プロファイル___Salesforce

アクセストークンとリフレッシュトークンを取得

2. 認証コードを取得

必要情報
  • メソッド:GET
  • エンドポイント:https://login.salesforce.com/services/oauth2/authorize
  • クエリ(必須は以下3つ)
    • response_typecode
    • client_id:接続アプリケーション > プリケーションマネージャー > 参照 > 接続アプリケーションを管理する > コンシューマ鍵[^1]
    • redirect_uri:接続アプリケーション > プリケーションマネージャー > 参照 > 接続アプリケーションを管理する > コールバック UR

リクエスト例(ブラウザでアクセス):

https://login.salesforce.com/services/oauth2/authorize?response_type=code&client_id={{cliend_id}}&redirect_uri=http://localhost:8888
  • 上記URLにブラウザでアクセスするとSalesforce認可画面に遷移
  • 認可すると設定したredirect_uriに認証コードが付与されてリダイレクト

リダイレクト例:

https://locahost:8000?code=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

3. アクセストークンを取得

  • メソッド:POST
  • エンドポイント:https://login.salesforce.com/services/oauth2/token
  • ボディ部クエリ
    • grant_type:authorization_code
    • client_secret:アプリケーション > プリケーションマネージャー > 参照 > 接続アプリケーションを管理する > コンシューマの秘密[^1]
    • client_id:接続アプリケーション > プリケーションマネージャー > 参照 > 接続アプリケーションを管理する > コンシューマ鍵[^1]
    • redirect_uri:接続アプリケーション定義 > コールバック URL
    • code2. 認証コードを取得で取得したコード
    • リダイレクトURLに付与された認証コードは、パーセントエンコードされているのでデコードする(例:PHP urldecode())

レスポンス:

{
    "access_token": "0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "refresh_token": "5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "signature": "Cxxxxxxxxxxxxxxxxxxxxxxxx",
    "scope": "refresh_token visualforce wave_api custom_permissions web openid chatter_api id api eclair_api full",
    ...
}    

postman

[^1]: 鍵などの情報は、アプリケーションマネージャーから参照しないと表示されない。アプリケーション > 接続アプリケーション > 接続アプリケーションの管理では、鍵情報などは表示されない。

リフレッシュトークンを使ったアクセストークンの取得

ref. 更新セッションの OAuth 2.0 更新トークンフロー

  • アクセストークンは(接続アプリケーションの設定にもよるが)有効期限あり
  • リフレッシュトークンは(接続アプリケーションの設定にもよるが)有効期限なし
  • アクセストークンの有効期限が過ぎている場合はリフレッシュトークンを使ってアクセストークンを取得

更新トークンフロー