JavaのアプリからSalesforceのREST APIをコールする方法

Posted by

概要

Javaのアプリケーション等の外部システムからSalesforceのREST APIをコールするには、事前にSalesforceの対象組織に対してログイン認証をする必要があります。本記事ではその部分をJavaのSpring Bootのフレームワークでどのように実装するかについて、サンプルコードを交えて整理しております。また、そのアプリでSalesforceとのOAuthでの認証を実現する方法、Herokuへのデプロイする方法も簡単に記載しております。

構成

今回は下記のような構成で外部システムにあたる部分を実装します。

  • アプリ:Spring Boot(Java)
  • 基盤:Heroku

Javaアプリの作成

最初にSpring Initializr(https://start.spring.io/)からスケルトンを作成します。
今回は、ビルドツールはMavenを使用します。


pom.xmlファイルの作成

今回使用するライブラリをpom.xmlファイルに定義します。

ポイントは下記を使用する点となります。
spring-security-oauth2・・・SpringにおいてOAuthの認証を実現するために使用します。
spring-security-oauth2-autoconfigure・・・Spring Security OAuth2の設定をシンプルに実現するために使用します。

SSOでのOAuth認証を実装

OAuth2 コンシューマがアクセストークンを取得するためには、OAuth2 コンシューマが動作するアプリケーションを利用するユーザーによる OAuth2 プロバイダ認証がとおる必要があります。そのため、取得したアクセストークンで OAuth2 プロバイダのリソースサーバから確かにユーザーの情報が取得できることを確認することを、現在 OAuth2 コンシューマが動作するアプリケーションを利用しているユーザーの Sign On 処理に代えることができます。ユーザーは OAuth2 コンシューマが動作するアプリケーションではログイン処理を行わず、OAuth2 プロバイダでのみログイン認証を行えばよいため、これは Single Sign On の実現方法のひとつです。この Single Sign On を実現するために OAuth2 コンシューマとして必要な処理は、Spring Security OAuth の@EnableOAuth2Sso アノテーション設定で実現できます。

設定ファイルを読み込みREST APIをコール

application.propertiesに定義した設定を読み込み、SalesforceのREST APIをコールします。コンシューマ鍵とコンシューマの秘密鍵はHerokuの環境変数で設定するようにします。

REST APIのレスポンスを変換

REST APIのレスポンスのJSON文字列を変換するために下記のクラスを定義しておきます。

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

設定メニューのクイック検索で”アプリケーションマネージャ”を検索します。
※”接続アプリケーションを管理する”のメニューからは新規での作成ができないので注意が必要です。

接続アプリケーション名、API参照名、メールアドレスを入力します。

OAuthを有効化して、スコープとコールバックURLを入力します。
なお、コールバックURLには、Herokuにデプロイ後に決まる下記のURLを設定します。
https://YOUR_HEROKU_APP_NAME.herokuapp.com/login

これでコンシューマ鍵とコンシューマの秘密が発番されるので、後ほどHerokuの環境変数に設定します。

Herokuへアプリをデプロイ

まずはHerokuでアプリケーションを作成します。ここで入力したアプリ名がデフォルトのURLに含まれます。

アプリケーションを作成すると下記のようなHeroku Gitが作成されるので、こちらにアプリをPushします。
https://git.heroku.com/YOUR_HEROKU_APP_NAME.git

デモ

アプリケーションのURLへアクセス

Salesforceのログイン画面へ遷移

OAuthの認可

REST APIのコール結果を表示
となります。

参考

Spring Boot and OAuth2
https://spring.io/guides/tutorials/spring-boot-oauth2/

Deploying Spring Boot Applications to Heroku
https://devcenter.heroku.com/articles/deploying-spring-boot-apps-to-heroku

最後に

今回のサンプルコードは、下記にありますのでよかったら確認してください。
こちらから直接Herokuへデプロイすることもできます。
https://github.com/yhayashi30/restapi-salesforce-sso