OAuth認証を使用してSalesforce認証トークンを取得しようとしているため、 wiki docs を参照しましたが、認証コードを取得した後、5でPostリクエストを行うと必須パラメータ、私は次の例外を取得しています
{"error":"invalid_grant","error_description":"authentication failure"} CODE 400
JSON = {"error":"invalid_grant","error_description":"authentication failure"}
これは悪いリクエストだと思います。
PostMethod post = new PostMethod("https://login.salesforce.com/services/oauth2/token");
post.addParameter("code",##############);
post.addParameter("grant_type","authorization_code");
post.addParameter("redirect_uri","#################");
post.addParameter("client_id",this.client_id);
post.addParameter("client_secret",this.client_secret);
httpclient.executeMethod(post);
String responseBody = post.getResponseBodyAsString();
System.out.println(responseBody+" CODE "+post.getStatusCode());
例外がわかっている場合、親切に返信してください。
私のように立ち往生し、イライラしている人のために、プロセス全体に関する詳細なブログ投稿を残しました(写真と保証コメント付き!)。必要な場合は、リンクをクリックしてください。
http://www.calvinfroedge.com/salesforce-how-to-generate-api-credentials/
ここにテキストのみの回答があります:
ステップ1:
アカウントを作成する。 developer.salesforce.comで(無料の)開発者アカウントを作成できます。
ステップ2:
すべてのランディングページを無視し、開始のがらくたを開始します。それは無限のマーケティングループです。
ステップ3:
「セットアップ」リンクをクリックします
ステップ4:
左側のツールバーの[作成]で[アプリ]をクリックします
ステップ5:
[接続済みアプリ]で[新規]をクリックします
ステップ6:
フォームに記入する。重要なフィールドは、必須としてマークされたフィールドと、oauthセクションです。コールバック用に任意のURLを残すことができます(localhostを使用しました)。
ステップ7:
Salesforceの可用性は安っぽいことに注意してください。
ステップ8:
続行を押します。最後に、client_idキー(「Consumer Key」というラベル)とclient_secret(「Consumer Secret」というラベル)があります。
ステップ9:
ちょっと待って!まだ完了していません。 [管理]、[ポリシーの編集]の順に選択します
IP緩和がIP制限の緩和に設定されていることを確認してください。
[許可されたユーザー]が[すべてのユーザーが自己承認できる]に設定されていることを確認します。
[セキュリティ]> [ネットワークアクセス]> [信頼できるIP範囲]が設定されていることも確認してください
セキュリティを無効にすることが心配な場合は、今はやめましょう。API呼び出しを行えるように、今のところこれを機能させたいだけです。すべてを一度に1つずつ機能させたら、アクセス許可を強化します。これにより、認証エラーが発生している設定を把握できます。
ステップ10:
祝う!このcurl呼び出しは成功するはずです:
onproduction:
curl -v https://login.salesforce.com/services/oauth2/token \
-d "grant_type=password" \
-d "client_id=YOUR_CLIENT_ID_FROM_STEP_8" \
-d "client_secret=YOUR_CLIENT_SECRET_FROM_STEP_8" \
-d "[email protected]" -d "[email protected]"
onsandboxまたはtest:
curl -v https://test.salesforce.com/services/oauth2/token \
-d "grant_type=password" \
-d "client_id=YOUR_CLIENT_ID_FROM_STEP_8" \
-d "client_secret=YOUR_CLIENT_SECRET_FROM_STEP_8" \
-d "[email protected]" -d "[email protected]"
注:
ユーザーが独自のアプリケーションを認証する必要があるマルチテナントアプリを構築している場合は、パスワード認証を行うべきではありません。そのためにOauth2ワークフローを使用します。
パスワードに追加されたセキュリティトークンを渡す必要がある場合があります。
この問題もありました。
確認してください Connected App 設定-下 Selected OAuth Scopes、選択した権限を調整する必要がある場合があります。私たちのアプリは主にChatterを使用するため、両方を追加する必要がありました。
chatter_api
)refresh_token
)。繰り返しますが、走行距離は異なる場合がありますが、アプリケーションの動作/必要性に基づいて許可のさまざまな組み合わせを試してください。
さらに、実際のinvalid_grant
エラーはIP制限が原因で発生しているようです。 OAuth認証コードを実行しているサーバーのIPアドレスが許可されていることを確認してください。SFDC環境にIP制限設定がある場合 Enforce IP restrictions セット(Setup -> Administer -> Manage Apps -> Connected Apps)、各User Profileにも許可されたIPアドレスが必要です。
ログインするとOAuth 2トークンの場合...
login.salesforce.com
で https://login.salesforce.com/services/oauth2/token を使用しますtest.salesforce.com
で https://test.salesforce.com/services/oauth2/token を使用しますcurl https://login.salesforce.com/services/oauth2/token -d "...credentials..."
を呼び出すと、まだ失敗しました:
{"error":"invalid_grant","error_description":"authentication failure"}
読み取り時に異なるOAuth環境があることに気づいた 特にSalesforceのOAuth 2.0をさらに掘り下げて (強調を追加):
OAuth 2.0認証エンドポイント
OAuthエンドポイントは、Salesforceに対してOAuth認証要求を行うために使用するURLです。アプリケーションが認証リクエストを行うとき、正しいSalesforce OAuthエンドポイントを使用していることを確認してください。主なエンドポイントは次のとおりです。
- 承認- https://login.salesforce.com/services/oauth2/authorize
- トークン- https://login.salesforce.com/services/oauth2/token
- 取り消し— https://login.salesforce.com/services/oauth2/revoke (アクセスの取り消しの詳細については、OAuthトークンの取り消しを参照)
login.salesforce.comの代わりに、顧客は私のドメイン、コミュニティ、またはtest.salesforce.com(これらのエンドポイントの(サンドボックス)ドメイン。
test.salesforce.com
を介して環境にログインしたため、curl https://test.salesforce.com/services/oauth2/token -d "...credentials..."
に切り替えると "おめでとうございます!(> ^ _ ^)> Give OAuth token応答」
Salesforceでは、セキュリティとデータの整合性に関する業界のベストプラクティスに合わせて、2017年7月22日までにTLS 1.1以上にアップグレードする必要があります: from help.salesforce.com 。
このコードを追加してみてください:
System.Net.ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
別のオプションは、レジストリを編集することです:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
詳細な回答については、このリンクを確認してください: 。NET 4.5のデフォルトSecurityProtocol
IPアドレス範囲をホワイトリストに登録するには、次の手順を実行します。
Setup
をクリックしますAdminister
> Security Controls
> Network Access
を選択しますNew
をクリックしますSave
をクリックしますSalesforceパスワードをパスワードとセキュリティトークンの組み合わせで置き換えます。たとえば、パスワードが「MyPassword」でセキュリティトークンが「XXXXXX」の場合、パスワードフィールドに「MyPasswordXXXXXX」と入力する必要があります。
セキュリティトークンがない場合は、次のようにリセットできます。
アクセストークン設定でコンシューマキーとコンシューマシークレットを入力した場合、 Postman を使用してAPEXコントローラを呼び出すことができます。これにはセキュリティトークンは必要ありません。
このスクリーンショットのように承認を設定します...
[新しいアクセストークンの取得]ボタンをクリックした後、ウィンドウに資格情報を入力します...
次に、「トークンのリクエスト」ボタンを押してトークンを生成し、「トークンの使用」ボタンを押すと、「アクセストークンの取得」ボタンを押した「認証」タブの「アクセストークン」フィールドに入力されます。
私はこれを機能させようとして机に頭をぶつけていました。私の問題はコピーと貼り付けで、「文字を台無しにしました。私が行って手動で入力」するとコマンドラインに貼り付けられ、それが機能しました。
すべてのキーを正しく設定しても同じエラーが発生し、接続できない理由を突き止めるのに多くの時間を費やしました。
最後に、セットアップ->接続済みアプリの管理->「MyAppName」をクリック->「ポリシーの編集」であることがわかりました。
「許可されたユーザー」フィールドの値に「すべてのユーザーが自己認証できる」を設定する必要があります。