在 Salesforce 中获取{"error":"invalid_grant","error_description":"身份验证失败"}?

问题描述 投票:0回答:12

我正在尝试获取我的 salesforcepartialbox 的会话 ID。

我的代码:

curl https://test.salesforce.com/services/oauth2/token -d "grant_type=password" -d "client_id=definitely the correct client id" -d "client_secret=definitely the correct client secret" -d "[email protected]" -d "password=passandsecuritytoken"

我还做了什么:

  • 在我连接的应用程序设置中授予完全访问权限
  • 设置IP限制,放松IP限制
  • “所有用户都可以给自己授权”
  • 双重检查通行证、客户端 ID、客户端密码、用户名

我仍然收到错误

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

我搜索了 SF 论坛和 Stack Overflow 问题,但找不到任何解决方案。有谁知道,这里还有什么问题吗?

rest curl salesforce
12个回答
12
投票

确保您已完成此步骤。

*应用程序 -> 管理连接的应用程序 -> (我的应用程序的名称) -> 编辑应用程序 -> OAuth 策略 然后将“允许的用户”设置为“所有用户可以自行授权”。

*管理应用程序 -> 连接的应用程序 -> (我的应用程序的名称) 然后将“IP放宽”设置为“放宽IP限制”。

尝试在启用 TLS 1.1 的情况下发出curl 请求

curl -v https://login.salesforce.com/services/oauth2/token -d“grant_type=password”-d“client_id=xxxxxxxxxxXXXXXXXXXX”-d“client_secret=123456789”-d“[电子邮件受保护] ”-d“密码=xxxxxxxxxx”


11
投票

我仍然很困惑,我不知道到底发生了什么,但我遇到了同样的问题,并且我能够通过执行以下操作来“修复”它。

首先,放宽应用程序的IP限制。

管理应用程序 -> 连接的应用程序 -> (我的应用程序的名称)

然后将“IP放宽”设置为“放宽IP限制”。

据我所知,我正在使用的沙盒应用程序中没有 IP 限制,但我对此仍然陌生,所以也许它们隐藏在某个地方。

其次,在我的curl命令中,它看起来很像你的,我省略了安全令牌,所以密码字段只是密码。

我真的不知道我是否已经解决了我的问题,但我得到了一个访问令牌,而不是“invalid_grant”错误。

我计划做一些额外的调查来弄清楚发生了什么,但我想,当我提出这个问题时,我会确保这个答案在这里。


3
投票

Salesforce 要求在 2017 年 7 月 22 日之前升级到 TLS 1.1 或更高版本,以便与安全性和数据完整性的行业最佳实践保持一致: 来自 help.salesforce.com.

如果您使用的 .Net 版本早于 4.6,请尝试添加以下代码:

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 中的默认安全协议


3
投票

还有一项设置对于配置两个 Salesforce 组织之间的集成非常重要,当出现无效授权错误时应启用“允许 OAuth 用户名-密码流”


1
投票
网址中的

Inplace 或 login.salesforce.comtest.salesforce.com 使用您的组织实例 url

https://{myorgurl}/services/oauth2/token


0
投票

Here are the setting I have in my Salesforce sandbox.

So basically I have added the Profile of my REST API user to the list of App Profiles.

我的要求是这样的:

POST: https://login.salesforce.com/services/oauth2/token?grant_type=password&client_id=3MVG1ZL0ppGP2UrDck7ipSVNGs9s17mpIc3mRacC8Y_9o3r_amXxZZaasoBFbUF_r0aUvaFtIoxxx3Y5qik5&client_secret=6412349245332722664&[email protected]&password=XXXX

0
投票

我非常擅长为 API 使用随机密码,其中包括; ,或其他普通人不使用的奇怪的东西作为密码。 Salesforce 似乎不喜欢 api 中的这些字符,因此我使用数字和字母,没有特殊字符。我不止一次遇到过这个问题,所以希望这能对其他人和未来的我有所帮助。


0
投票

您必须在连接的应用程序中添加配置文件: 转至:连接的应用程序 -> 配置文件 -> 管理配置文件 -> 应用程序配置文件分配 -> 选择系统管理员 -> 保存


0
投票

将 OAuth 策略允许的用户设置更改为“所有用户可以自行授权”使我能够成功进行 API 调用。

在管理连接的应用程序中找到 -> 编辑

Screenshot of Salesforce setting


0
投票

它可以是任何东西。但是...就我而言,我用于用户帐户的密码包含井号或井号 (#),Salesforce 显然一点也不喜欢。当我从 Postman 中运行它时,得到了“400 错误语法”响应。

我将密码更改为严格的字母数字(无标点符号)并立即获得了令牌。

所以我的建议是,如果您像我一样用头撞墙几个小时或更长时间,认为自己疯了,只需尝试将密码更改为仅字母数字字符。它可能会起作用。如果没有,那么至少你可以排除这种可能性。


0
投票

上面检查“允许 oauth user=password 流”设置是一个有用的建议,花了 3 个多小时来解决无效 gran_type 的问题。


0
投票

我有同样的问题,我解决了它,因为我的密码包含“%”字符。

© www.soinside.com 2019 - 2024. All rights reserved.