· 

コミュニティユーザでREST APIを使用した話

クライアントアプリからsaleaforceにExcel、CSVの形式のファイルを読込みデータをアップロードしたいという仕様が挙がってきた。

https://login.salesforce.com/からは直接ログインできないユーザであるため、

不安を感じつつも通常のユーザと同様にトークンを要求してみる。

 

アクセストークンの要求の仕方のヘルプ

 https://help.salesforce.com/articleView?id=remoteaccess_oauth_username_password_flow.htm&type=5

 

結果はBadRequest(400)。

まぁダメもとで試しただけだからここまでは予想の範囲内。

 

では、どうすればトークンを取得できるのか?そもそも可能なのか?

 

DataLoaderはコミュニティユーザでも使用可能なので、

どのようにやっているのか解析していくと、

ユーザエージェントフローで認証しており、

同様のことが出来そうだということを突き止めた。

 

OAuth 2.0 ユーザエージェントフローのヘルプ

https://help.salesforce.com/articleView?id=remoteaccess_oauth_user_agent_flow.htm&type=5

 

上記を参考に設定したURLは以下のようになった

・URL

 <コミュニティURL>/services/oauth2/authorize

・パラメータ

 response_type=token

 client_id=<コンシューマ鍵>

 redirect_uri=<コミュニティURL>/services/oauth2/success

 

設定したURLにリクエストを送るとリダイレクトレスポンス(302)が返ってくる。

このリダイレクト先がコミュニティのログインページとなっており、

コミュニティユーザのID、パスワードでログインすることができる。

 

またこの時、ログイン後はパラメータ startUrlで指定された先に遷移させる必要がある。

ログインが成功すると、アプリケーションの認証を求める画面が表示され許可を選択すると

redirect_uriで設定した先に移動し、フラグメント(#)としてアクセストークン等の情報が取得できる。

 

取得したアクセストークンが通常ライセンスユーザと同様の使用方法で問題なく動作することを確認して、

一件落着となりましたとさ。