Salesforce身份验证失败
我试图使用OAuth身份验证来获取Salesforce身份验证令牌,所以我提到了,但是在获得授权代码之后,当我使用5个必需参数发出Post请求时,我得到了以下异常Salesforce身份验证失败,salesforce,oauth-2.0,force.com,Salesforce,Oauth 2.0,Force.com,我试图使用OAuth身份验证来获取Salesforce身份验证令牌,所以我提到了,但是在获得授权代码之后,当我使用5个必需参数发出Post请求时,我得到了以下异常 {"error":"invalid_grant","error_description":"authentication failure"} CODE 400 JSON = {"error":"invalid_grant","error_description":"authentication failure"} 我想这是个错误的要
{"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());
如果知道例外情况,请回复?我们也有这个问题 检查连接的应用程序设置-在选定的OAuth范围下,您可能需要调整选定的权限。我们的应用程序主要使用Chatter,因此我们必须同时添加这两个功能:
- 访问和管理Chatter提要(
)Chatter\u api
- 随时代表您执行请求(
)refresh\u token
此外,实际的
无效\u授权
错误似乎是由于IP限制而发生的。确保允许运行OAuth身份验证代码的服务器IP地址。我发现,如果SFDC环境具有IP限制设置强制设置IP限制(设置->管理->管理应用->连接的应用),那么每个用户配置文件也必须具有允许的IP地址。对于像我一样陷入困境和沮丧的人,我在整个过程中都留下了详细的博客文章(带有图片和激烈的评论!)。如果需要,请单击链接:
以下是一个纯文本的答案:
步骤1:
创建一个帐户。您可以在developer.salesforce.com上创建一个(免费)开发人员帐户
步骤2: 忽略所有的登录页和入门废话。这是一个无休止的营销循环
步骤3: 单击“设置”链接
步骤4: 在左侧工具栏的“创建”下,单击“应用程序”
步骤5: 在“已连接的应用”下,单击“新建”
步骤6: 填写表单。重要字段是标记为必需的字段和oauth部分。请注意,您可以为回调留下任何url(我使用了localhost)
步骤7: 请注意,Salesforce的可用性很差
步骤8: 按continue。您终于有了客户端id密钥(标记为“消费者密钥”)和客户端密钥(标记为“消费者密钥”)
步骤9: 但是,等等!您还没有完成;请选择“管理”,然后选择“编辑策略”
步骤10: 庆祝!此curl呼叫应成功: 在生产方面: 在沙箱或测试中: 注意事项:
- 如果您正在构建一个多租户应用程序,用户需要授权他们自己的应用程序,那么您不应该进行密码授权。为此,请使用Oauth2工作流
- 您可能需要传入附加在密码后的安全令牌
Setup
管理
安全控制
网络访问
New
保存
Salesforce要求在2017年7月22日之前升级到TLS 1.1或更高版本,以符合安全性和数据完整性方面的行业最佳做法: 尝试添加以下代码:
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
查看此链接以获取更详细的答案:
TL:DR
对于OAuth 2令牌,如果您登录
- 在
使用login.salesforce.com
- 在
使用test.salesforce.com
curl时https://login.salesforce.com/services/oauth2/token -d“…凭据…”
仍然失败,原因是:
{“错误”:“授权无效”,“错误描述”:“身份验证失败”}
- 授权书-
- 代币-
- 撤销-(有关撤销访问的详细信息,请参阅撤销OAuth令牌)
因为我通过
test.salesforce.com
切换到curl登录了我的环境https://test.salesforce.com/services/oauth2/token -d“…凭证…”
导致了一个“”祝贺!(>^^^)>给出OAuth令牌响应”将Salesforce密码替换为密码和安全令牌的组合。例如,如果密码为“MyPassword”,安全令牌为“XXXXXX”,则需要在密码字段中输入“MyPasswordXXXXXX”
如果您没有安全令牌,可以按如下方式重置它
- 转到您的姓名-->我的设置-->
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
axios.post( url, qs.stringify({ grant_type: "password", username: process.env.USERNAME, password: process.env.PASSWORD, client_id: process.env.SF_ID, client_secret: process.env.SF_SECRET, }), { headers: "Content-Type": "application/x-www-form-urlencoded", }, )
axios.post( url, { grant_type: "password", username: process.env.SF_USERNAME, password: process.env.SF_PASSWORD, client_id: process.env.SF_ID, client_secret: process.env.SF_SECRET, } );