我试图使用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());
请回复,如果异常知?
对于任何人谁是卡住和沮丧,因为我是,我已经离开对整个过程进行详细的博客文章(有图片和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步:
可是等等! 您还没有完成; 选择“管理”,然后“编辑政策”
确保IP放松设为放松IP限制 ,
并确保允许用户设置为“所有用户自我检查。”
并确保您的安全>网络访问>可信的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"
笔记:
我们有这个问题为好。
检查连接的应用程序设置-在所选OAuth范围 ,你可能需要调整选定的权限。 我们的应用程序主要使用颤振 ,所以我们必须添加两个:
- 访问和管理您的颤振饲料(
chatter_api
) - 随时代表您执行请求(
refresh_token
)。
/需要再次,你的里程可能会有所不同,但尝试根据您的应用程序的功能权限的不同组合。
此外,实际invalid_grant
错误似乎由于IP限制发生。 确保在运行OAuth认证码服务器的IP地址是允许的。 我发现,如果SFDC环境有IP限制设置强制设置IP限制 ( 设置 - > 管理 - > 管理应用程序 - > 关联的应用 ),那么每个用户配置文件必须在允许的IP地址也是如此。
: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
TL:DR
如果是OAuth 2个令牌,如果您登录...
- 在
login.salesforce.com
使用https://login.salesforce.com/services/oauth2/token - 在
test.salesforce.com
使用https://test.salesforce.com/services/oauth2/token
故事:
- 我在下面的Salesforce“设定OAuth 2.0”
- 凭据是正确的(许多逐个字符检查)
当我称之为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令牌响应”
用密码和安全令牌的组合替换您的Salesforce密码。 例如,如果你的密码是“MyPassword输入”和您的安全令牌是“XXXXXX”,你就需要在密码字段中输入“MyPasswordXXXXXX”。
如果你不具备安全令牌可以如下重置。
- 去你的名字 - >我的设置 - >个人 - >重置我的安全令牌。
您可以使用打电话给你的APEX控制器邮递员 ,如果你在访问令牌设置中输入使用者密钥和秘密-你不需要安全令牌这一点。
建立这样的屏幕截图授权...
邮差的OAuth 2.0
并创下了获取新的访问令牌按钮后,在窗口中输入您的凭据...
获取访问令牌
然后点击请求令牌按钮生成令牌,然后点击使用标记按钮,它会填充,你打了获取新的访问令牌按钮的授权选项卡上的访问令牌场。
我敲我的头靠在桌子试图得到这个工作。 原来我的问题是复制和粘贴,它搞砸了“的性格。我去和手动键入”粘贴即进入命令行,然后它的工作。
我使用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不支持呢?