Salesforce的身份验证失败(Salesforce Authentication Failin

2019-06-18 11:53发布

我试图使用OAuth认证,以获得Salesforce的身份验证令牌,所以我提到的wiki文档 ,但得到授权码后,当我提出用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());

请回复,如果异常知?

Answer 1:

对于任何人谁是卡住和沮丧,因为我是,我已经离开对整个过程进行详细的博客文章(有图片和ranty评论!)。 如果你想要一个点击链接:

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

这是一个纯文本的答案:

步骤1:

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


第2步:

忽略所有着陆页,入门废话。 这是一个无休止的营销循环。


第3步:

点击“设置”链接


第4步:

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


第5步:

在“关联的应用”,单击“新建”


第6步:

填写表格。 重要的区域是按要求标注的,和OAuth的部分。 请注意,您可以留下任何网址为您的回调(我使用本地主机)。


第7步:

注意,Salesforce的有蹩脚的可用性。


第8步:

按继续。 你终于有你的client_id键(标记为“消费重点”)和client_secret(标记为“消费者的秘密”)。


第9步:

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

  1. 确保IP放松设为放松IP限制

  2. 并确保允许用户设置为“所有用户自我检查。”

  3. 并确保您的安全>网络访问>可信的IP范围已定

如果你很在意禁用安全,不要现在,你只想得到这个工作,现在这样就可以使API调用。 拧紧权限,一旦你拥有了一切工作,一次一个,这样你就可以找出设定是给你的身份验证错误。


第10步:

庆祝! 这种卷曲调用应该会成功:

生产

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"

笔记:

  • 你不应该做的密码授权,如果你正在构建一个多租户应用,即用户需要授权自己的应用。 使用的oauth2工作流程为。

  • 您可能需要追加到您的密码安全令牌传递。



Answer 2:

我们有这个问题为好。

检查连接的应用程序设置-在所选OAuth范围 ,你可能需要调整选定的权限。 我们的应用程序主要使用颤振 ,所以我们必须添加两个:

  • 访问和管理您的颤振饲料( chatter_api
  • 随时代表您执行请求( refresh_token )。

/需要再次,你的里程可能会有所不同,但尝试根据您的应用程序的功能权限的不同组合。

此外,实际invalid_grant错误似乎由于IP限制发生。 确保在运行OAuth认证码服务器的IP地址是允许的。 我发现,如果SFDC环境有IP限制设置强制设置IP限制设置 - > 管理 - > 管理应用程序 - > 关联的应用 ),那么每个用户配置文件必须在允许的IP地址也是如此。



Answer 3:

:Salesforce的是为了与安全性和数据完整性的行业最佳做法看齐需要升级到TLS 1.1或更高版本,到2017年7月22日, 从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



Answer 4:

TL:DR

如果是OAuth 2个令牌,如果您登录...

  • login.salesforce.com使用https://login.salesforce.com/services/oauth2/token
  • test.salesforce.com使用https://test.salesforce.com/services/oauth2/token

故事:

  1. 我在下面的Salesforce“设定OAuth 2.0”
  2. 凭据是正确的(许多逐个字符检查)
  3. 当我称之为curl https://login.salesforce.com/services/oauth2/token -d "...credentials..."它仍然失败:

    {"error":"invalid_grant","error_description":"authentication failure"}

解:

意识到有读取时不同的OAuth环境深入研究成的OAuth 2.0在Salesforce具体(强调):

OAuth 2.0验证端点

OAuth的终点是你使用,使OAuth的认证请求到Salesforce的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..."导致了“恭喜!(> ^ _ ^)>提供的OAuth令牌响应”



Answer 5:

白名单的IP地址范围,请按照下列步骤操作:

  1. 点击Setup在右上方
  2. 选择Administer > Security Controls > Network Access从左侧导航
  3. 点击New
  4. 添加您的IP地址范围
  5. 点击Save


Answer 6:

用密码和安全令牌的组合替换您的Salesforce密码。 例如,如果你的密码是“MyPassword输入”和您的安全令牌是“XXXXXX”,你就需要在密码字段中输入“MyPasswordXXXXXX”。

如果你不具备安全令牌可以如下重置。

  • 去你的名字 - >我的设置 - >个人 - >重置我的安全令牌。


Answer 7:

您可以使用打电话给你的APEX控制器邮递员 ,如果你在访问令牌设置中输入使用者密钥和秘密-你不需要安全令牌这一点。

建立这样的屏幕截图授权...

邮差的OAuth 2.0

并创下了获取新的访问令牌按钮后,在窗口中输入您的凭据...

获取访问令牌

然后点击请求令牌按钮生成令牌,然后点击使用标记按钮,它会填充,你打了获取新的访问令牌按钮的授权选项卡上的访问令牌场。



Answer 8:

我敲我的头靠在桌子试图得到这个工作。 原来我的问题是复制和粘贴,它搞砸了“的性格。我去和手动键入”粘贴即进入命令行,然后它的工作。



Answer 9:

我使用Salesforce SOAP API与下列请求格式

<?xml version="1.0" encoding="utf-8" ?>
        <env:Envelope
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
                xmlns:urn="urn:partner.soap.sforce.com">
            <env:Header>
                <urn:CallOptions>
                    <urn:client>client_id</urn:client>
                    <urn:defaultNamespace>sf</urn:defaultNamespace>
                </urn:CallOptions>
            </env:Header>
            <env:Body>
                <n1:login xmlns:n1="urn:partner.soap.sforce.com">
                    <n1:username>username</n1:username>
                    <n1:password>password+security_token</n1:password>
                </n1:login>
            </env:Body>
        </env:Envelope>

我得到了成功登录,但应用程序不显示我的设置。 当我用这个方法试了,这是工作。

卷曲-v https://login.salesforce.com/services/oauth2/token -d “grant_type =密码” -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”

谁能告诉我什么,我做错了或销售人员SOAP API不支持呢?



文章来源: Salesforce Authentication Failing