我正在尝试使用OAuth身份验证来获取Salesforce身份验证 token ,因此我引用了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());

请答复,如果知道异常(exception)情况?

最佳答案

对于像我一样陷入困境和沮丧的任何人,我在整个过程中都留下了详细的博客文章(带有图片和保证评论!)。如果需要,请单击链接:

http://www.calvinfroedge.com/salesforce-how-to-generate-api-credentials/

这是纯文字答案:

步骤1:

创建一个帐户。您可以在developer.salesforce.com上创建(免费)开发者帐户。

第2步:

忽略所有登录页面和入门废话。这是一个无止境的营销循环。

第三步:

点击“设置”链接

第四步:

在左侧工具栏中的“创建”下,单击“应用”

步骤5:

在“已连接的应用程序”下,单击“新建”

步骤6:

填写表格。重要字段是标记为必填字段和oauth部分。请注意,您可以为回调保留任何URL(我使用localhost)。

步骤7:

请注意,Salesforce的可用性很差。

步骤8:

按继续。最后,您有了client_id密钥(标记为“Consumer Key”)和client_secret(标记为“Consumer Secret”)。

步骤9:

可是等等!您还没有完成;选择“管理”,然后选择“编辑政策”

  • 确保将IP放松设置为放松IP限制
  • ,并确保将“允许的用户”设置为“所有用户都可以自我授权。”
  • ,并确保已设置“安全性”>“网络访问”>“可信IP范围”。

  • salesforce - Salesforce身份验证失败-LMLPHP

    salesforce - Salesforce身份验证失败-LMLPHP

    如果您担心禁用安全性,请暂时不要,只是想暂时启用它,以便进行API调用。一次完成所有工作后,请收紧权限,这样您就可以弄清楚哪种设置会给您带来身份验证错误。

    步骤10:

    庆祝!此curl调用应该成功:

    生产中:
    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 "username=user@wherever.com" -d "password=foo@bar.com"
    

    在沙盒或测试中:
    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 "username=user@wherever.com" -d "password=foo@bar.com"
    

    注意:
  • 如果您要构建 Multi-Tenancy 应用程序(用户需要在其中授权自己的应用程序),则不应进行密码授权。为此使用Oauth2工作流程。
  • 您可能需要传递附加在密码上的安全 token 。
  • 关于salesforce - Salesforce身份验证失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12794302/

    10-12 02:40