この記事について
SalesForceのAPIを叩く前にOauth2にてトークンを取得しようとしていた時に躓いたポイントをまとめています。
起きていた現象
GoogleAppsScriptを用いて以下のコードでSalesForceのOauth2を叩いて、アクセストークンを取得しようとしていたのですが、invalid_client_id","error_description":"client identifier invalidというエラーがでてきて取得ができませんでした。
function authorization() {
var res = UrlFetchApp.fetch(
"https://login.salesforce.com/services/oauth2/token",
{
"method" : "POST",
"payload" : {
"grant_type": "password",
"client_id": "SalesForceのコンシューマ鍵", //コンシューマ鍵
"client_secret": "SalesForceのコンシューマの秘密", //コンシューマの秘密
"username": "ユーザーネーム", //ユーザ名
"password": "パスワード" //パスワード
},
"contentType": "application/x-www-form-urlencoded",
"muteHttpExceptions": true
});
if (res.getResponseCode() == 200) {
var prop = PropertiesService.getScriptProperties();
prop.setProperty("session_info", res.getContentText());
console.log("接続成功");
} else{
console.log(res.getContentText());
console.log("接続失敗");
}
}
resという変数に返ってくるのはエラーレコードだけでした。
対応したこと
結論、エラーが出た次の日に認証を試してみたら接続できました。そもそも接続用のアプリケーションが有効化されるのに時間がかかるようですね。他にもいろいろと対応したことがあったので書き記します。
ユーザー名パスワードフローを許可のトグルをONにした
以下のキャプチャのようにOauth設定のユーザー名とパスワードフローを許可のトグルをONにしました。
作成したアプリケーションへのアクセスを許可した
プロファイル設定から接続アプリケーションへのアクセスというチェックボックスがあります。今回作ったのはGASAPIという接続アプリケーションを作っていたので、これのアクセスができるようにチェックボックスをTRUEにしました。
接続用アプリケーションのOauthポリシーを変更した
IP制限の緩和というオプションをIP制限の緩和に設定し、許可されているユーザーというオプションをすべてのユーザーは自己承認可能に変更しました。
何が理由でできたか
上記の対応を行ったとしてもしばらくアクセストークンを取得することができず、一晩寝て、次の日にトライしたらアクセストークンの取得に成功しました。つまり、結局いろいろ設定をいじってみたのですが、たぶん有効化されるまでに時間がかかるだけなのかなと思います。同じく躓いた人に参考になればと思います。