概要
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