今回は連携部分について、SalesforceへはSOAP APIとREST APIで連携することが多いのでログイン方法を覚えましょう。
SOAP APIのログイン
SOAP APIを使用するときは、まずログインでユーザを認証する必要があります。
手順としては、
- 認証エンドポイントを指定して、ユーザ名とパスワードを指定
- 認証OKなら、セッションIDを含むログイン情報が返ってくる
- 以降のSOAP処理はセッションIDを付加してAPIを呼び出す
といった具合です。
ちなみに、明示的なログアウトは不要です。セッションタイムアウト(デフォルトは120分)過ぎれば使えなくなります。
まあ、120分もSOAPを使いまくることはないんでしょうけど。
テストで押さえておくポイントは、何を渡して、何を受け取るか。
SOAP APIの場合は、ユーザ名とパスワードを渡して、セッションIDを受け取るということになりますね。
また、ログインした時のIPアドレスが信頼済みでなかったら、セキュリティトークンも一緒に渡す必要があります。
渡し方はパスワードの後ろにくっつけるだけ。
REST APIのログイン
REST APIのログイン方法は3通りあります。
その前に準備を
REST APIを使用して、接続する場合は接続アプリケーションを作成しておく必要があります。
設定→作成→アプリケーションから接続アプリケーションのところの「新規」で作成しましょう。
僕は何回か騙されかけていますが、設定→アプリケーションを管理する→接続アプリケーションからは作成できないので注意しましょう。
赤枠が認証時に使う情報です(中身は一部マスクしています)。
接続アプリケーションはSalesforceへの玄関口みたいな感じでしょうか。
WebサーバOAuth認証
どこかのWebサーバ(外部サーバや別組織のsalesforce)からREST APIでログインする方法です。
- コンシューマ鍵とコールバックURLを渡して認証エンドポイントにリダイレクト
- Salesforceのユーザ認証画面を表示されるので、ユーザ名とパスワードを指定してログイン
- コールバックURLにリダイレクトし、アクセストークンを取得するための認証コードを返す
- アクセストークンを要求(コンシューマ鍵、コンシューマの秘密、コールバックURL、認証コード)
- アクセストークンを含むレスポンスボディを返却(アクセストークン、リフレッシュトークン、インスタンスURL、ユーザ情報参照用URL、署名)
- アクセストークン(または更新トークン)を付加してREST APIサービスをコール
このように、2段構えとなっております。
その分、情報のやりとりも多くなっているので、何を渡して何を受け取るかを覚えておきましょう。
ユーザエージェントOAuth認証
こちらはクライアントアプリ等からREST APIを使用する方法です。
手順はこんな感じになります。
- コンシューマ鍵とコールバックURLを渡して認証エンドポイントにリダイレクト
- Salesforceのユーザ認証画面を表示されるので、ユーザ名とパスワードを指定してログイン
- アクセストークンを含むレスポンスボディを返却(アクセストークン、リフレッシュトークン、インスタンスURL、ユーザ情報参照用URL、署名)
- アクセストークン(または更新トークン)を付加してREST APIサービスをコール
WebサーバOAuth認証と比べ、中抜きされたような感じです。
ユーザ認証後、アクセストークン取得まで一気にやってくれます。
ユーザ名パスワードOAuth認証
ユーザ名パスワードOAuth認証した時の手順となります。
この方法の特徴は、ユーザ認証画面を挟まないこと。
その代わり、ユーザIDとパスワードをプログラムや設定ファイルなどに保持しておく必要があります。
その分、手順は減りましたが、必要な情報はそれほど変わっていないようです。
- 認証情報(ユーザ名とパスワード)の他、コンシューマ鍵、コンシューマの秘密、コールバックURLを渡して認証エンドポイントにリダイレクト
- アクセストークンを含むレスポンスボディを返却(アクセストークン、リフレッシュトークン、インスタンスURL、ユーザ情報参照用URL、署名)
- アクセストークン(または更新トークン)を付加してREST APIサービスをコール
まとめ
上級デベロッパーで出題されるところは、ログイン方法というより、ログイン時に渡される情報なのでSOAP、RESTともに押さえておきましょう。
他にもやりとりされる情報はありますが、主要なものだけをまとめるとこのようになります。
■SOAP
サーバへ渡す情報:ログインID、パスワード(+セキュリティトークン)
サーバから取得する情報:セッションID
■REST
サーバへ渡す情報:ログインID、パスワード(+セキュリティトークン)、コンシューマ鍵、コンシューマの秘密、コールバックURL
サーバから取得する情報:アクセストークン、リフレッシュトークン、認証コード
コメント