web-dev-qa-db-ja.com

Salesforce認証の失敗

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());

例外がわかっている場合、親切に返信してください。

52
Vardan Gupta

私のように立ち往生し、イライラしている人のために、プロセス全体に関する詳細なブログ投稿を残しました(写真と保証コメント付き!)。必要な場合は、リンクをクリックしてください。

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:

ちょっと待って!まだ完了していません。 [管理]、[ポリシーの編集]の順に選択します

  1. IP緩和IP制限の緩和に設定されていることを確認してください。

  2. [許可されたユーザー]が[すべてのユーザーが自己承認できる]に設定されていることを確認します。

  3. [セキュリティ]> [ネットワークアクセス]> [信頼できるIP範囲]が設定されていることも確認してください

OAuth settings

Security > Network Access > Trusted IP Ranges

セキュリティを無効にすることが心配な場合は、今はやめましょう。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ワークフローを使用します。

  • パスワードに追加されたセキュリティトークンを渡す必要がある場合があります。

137
Calvin Froedge

この問題もありました。

確認してください Connected App 設定-下 Selected OAuth Scopes、選択した権限を調整する必要がある場合があります。私たちのアプリは主にChatterを使用するため、両方を追加する必要がありました。

  • Chatterフィードへのアクセスと管理(chatter_api
  • いつでもリクエストを実行できます(refresh_token)。

繰り返しますが、走行距離は異なる場合がありますが、アプリケーションの動作/必要性に基づいて許可のさまざまな組み合わせを試してください。

さらに、実際のinvalid_grantエラーはIP制限が原因で発生しているようです。 OAuth認証コードを実行しているサーバーのIPアドレスが許可されていることを確認してください。SFDC環境にIP制限設定がある場合 Enforce IP restrictions セット(Setup -> Administer -> Manage Apps -> Connected Apps)、各User Profileにも許可されたIPアドレスが必要です。

14
dotNetkow

TL:DR

ログインするとOAuth 2トークンの場合...

ストーリー:

  1. 私はフォローしていました Salesforce "Set Up OAuth 2.0"
  2. クレデンシャルが正しかった(キャラクターチェックによる多くのキャラクター)
  3. 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エンドポイントを使用していることを確認してください。主なエンドポイントは次のとおりです。

login.salesforce.comの代わりに、顧客は私のドメインコミュニティ、またはtest.salesforce.com(これらのエンドポイントの(サンドボックス)ドメイン。

修正する

test.salesforce.comを介して環境にログインしたため、curl https://test.salesforce.com/services/oauth2/token -d "...credentials..."に切り替えると "おめでとうございます!(> ^ _ ^)> Give OAuth token応答」

7
3ygun

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

6
Amir M

IPアドレス範囲をホワイトリストに登録するには、次の手順を実行します。

  1. 右上のSetupをクリックします
  2. 左側のナビゲーションからAdminister> Security Controls> Network Accessを選択します
  3. Newをクリックします
  4. IPアドレス範囲を追加します
  5. Saveをクリックします
5
Troy Harvey

Salesforceパスワードをパスワードとセキュリティトークンの組み合わせで置き換えます。たとえば、パスワードが「MyPassword」でセキュリティトークンが「XXXXXX」の場合、パスワードフィールドに「MyPasswordXXXXXX」と入力する必要があります。

セキュリティトークンがない場合は、次のようにリセットできます。

  • [名前]-> [私の設定]-> [個人]-> [私のセキュリティトークンのリセット]に移動します。
3
Satish Tata

アクセストークン設定でコンシューマキーとコンシューマシークレットを入力した場合、 Postman を使用してAPEXコントローラを呼び出すことができます。これにはセキュリティトークンは必要ありません。

このスクリーンショットのように承認を設定します...

郵便配達人OAuth 2.

[新しいアクセストークンの取得]ボタンをクリックした後、ウィンドウに資格情報を入力します...

アクセストークンの取得

次に、「トークンのリクエスト」ボタンを押してトークンを生成し、「トークンの使用」ボタンを押すと、「アクセストークンの取得」ボタンを押した「認証」タブの「アクセストークン」フィールドに入力されます。

1
Kevin

私はこれを機能させようとして机に頭をぶつけていました。私の問題はコピーと貼り付けで、「文字を台無しにしました。私が行って手動で入力」するとコマンドラインに貼り付けられ、それが機能しました。

1
That Guy

すべてのキーを正しく設定しても同じエラーが発生し、接続できない理由を突き止めるのに多くの時間を費やしました。

最後に、セットアップ->接続済みアプリの管理->「MyAppName」をクリック->「ポリシーの編集」であることがわかりました。

「許可されたユーザー」フィールドの値に「すべてのユーザーが自己認証できる」を設定する必要があります。

0
algot