記事の概要
Salesforce Oauth2のuernameとpasswordを使用するパターンでinvalid_grantエラーに悩まされたので、備忘録
エラーが出た場合の確認チェックポイント
・grant_typeにpasswordという文字列が設定されているか
・client_idに接続アプリケーションのコンシューマ鍵を設定しているか
・client_secretに接続アプリケーションのコンシューマの秘密を設定しているか
・usernameにsalesforceにログインする時に使用するユーザ名を設定しているか
・passwordにsalesforceにログインする時に使用するパスワードを設定しているか
・接続アプリケーションの管理で「IP制限を緩和」に設定されている
->passwordの末尾にセキュリティトークンが付与されていないことを確認。IP制限を緩和の場合はセキュリティトークンは不要
・接続アプリケーションの管理で「IP制限を適用」に設定されている
->passwordの末尾にセキュリティトークンが付与されていることを確認。IP制限を適用の場合はpasswordの末尾にセキュリティトークンを付与する必要があります
・OAuth ポリシーの許可されているユーザが「すべてのユーザは自己承認可能」に設定されているか
・postするアドレスは正しいか
本番環境
https://login.salesforce.com/services/oauth2/token
テスト環境
https://test.salesforce.com/services/oauth2/token
問題の切り分け方としては、まずはIP制限を緩和に設定し、認証が成功するかどうか確認してみる。
IP制限を適用に戻し、認証が失敗するようならセキュリティトークンが誤っている可能性が高いです。
(今回は、プロパーから連携されたセキュリティトークンが間違っていて1日溶かしました・・・)
おまけ エラーに関係ありそうでなかった設定値
・セキュリティ->ネットワークアクセスのIP制限リスト
->いくつかstack_overflowで設定を確認との記事があったが、セキュリティトークンを使用できる環境であれば、関係なかった。
(IP制限されていてもセキュリティトークンが正しい場合は認証に成功する)
・プロファイル->接続アプリケーションへのアクセスのチェックボックス
->チェックボックスの有無で特に認証に影響はなかった。