クライアントアプリから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で設定した先に移動し、フラグメント(#)としてアクセストークン等の情報が取得できる。
取得したアクセストークンが通常ライセンスユーザと同様の使用方法で問題なく動作することを確認して、
一件落着となりましたとさ。