ブラウザとREST Client(Postman
)を使って、Salesforce APIのOAuth 2.0 Web サーバフロー
を説明。
Salesforce側
に接続アプリケーション
を作成コンシューマ鍵
(client_id
)とコンシューマの秘密
(client_secret
)を使って認証(アクセストークンとリフレッシュトークンを取得)Salesforce
でこの処理を更新トークン取得と呼ぶ)OAuth 範囲は以下2つあればよい(フルアクセスは必要ないはず)
データへのアクセスと管理(api)
ユーザーに代わっていつでも要求を実行(refresh_token, offline_access)
図:アプリケーションマネージャー
>編集
> 接続アプリケーションを管理
有効期限のないリフレッシュトークンをAPIで使用するには、以下を設定する。
アプリケーションマネージャー
>編集
>選択した OAuth 範囲
>ユーザーに代わっていつでも要求を実行(refresh_token, offline_access)
を選択接続アプリケーション
>接続アプリケーションを管理する
>編集
>更新トークンポリシー
で更新トークンは取り消されるまで有効
を選択アクセストークンの有効期限は以下順序で決定される。
接続アプリケーション
>接続アプリケーションを管理する
>編集
>セッションポリシー
のタイムアウト値
プロファイル
のセッションタイムアウトの開始条件
の値図:接続アプリケーション
>接続アプリケーションを管理する
>編集
図:ユーザープロファイル
GET
response_type
:code
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
Salesforce
認可画面に遷移 redirect_uri
に認証コードが付与されてリダイレクトリダイレクト例:
https://locahost:8000?code=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
grant_type
:authorization_codeclient_secret
:アプリケーション > プリケーションマネージャー > 参照 > 接続アプリケーションを管理する > コンシューマの秘密
[^1]client_id
:接続アプリケーション > プリケーションマネージャー > 参照 > 接続アプリケーションを管理する > コンシューマ鍵
[^1]redirect_uri
:接続アプリケーション定義 > コールバック URLcode
:2. 認証コードを取得
で取得したコード認証コード
は、パーセントエンコードされているのでデコードする(例: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",
...
}
[^1]: 鍵などの情報は、アプリケーションマネージャーから参照しないと表示されない。アプリケーション > 接続アプリケーション > 接続アプリケーションの管理では、鍵情報などは表示されない。
ref. 更新セッションの OAuth 2.0 更新トークンフロー