Var*_*pta 55 salesforce force.com oauth-2.0
我正在尝试使用OAuth身份验证来获取Salesforce身份验证令牌,所以我提到了wiki文档,但在获得授权代码后,当我发出带有5个必需参数的Post请求时,我遇到了以下异常
{"error":"invalid_grant","error_description":"authentication failure"} CODE 400
JSON = {"error":"invalid_grant","error_description":"authentication failure"}
Run Code Online (Sandbox Code Playgroud)
这是一个糟糕的要求.
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());
Run Code Online (Sandbox Code Playgroud)
如果有例外,请回复
Cal*_*dge 141
对于那些像我一样陷入困境和沮丧的人,我在整个过程中留下了一篇详细的博客文章(附图片和评论!).如果您需要,请单击该链接:
http://www.calvinfroedge.com/salesforce-how-to-generate-api-credentials/
这是一个纯文字答案:
步骤1:
创建一个帐户.您可以在developer.salesforce.com上创建(免费)开发人员帐户
第2步:
忽略所有登陆页面并开始废话.这是一个无休止的营销循环.
第3步:
单击"设置"链接
第4步:
在左侧工具栏的"创建"下,单击"应用程序"
第5步:
在"已连接的应用"下,点击"新建"
第6步:
填写表格.重要字段是标记为必需的字段和oauth部分.请注意,您可以为回调留下任何URL(我使用localhost).
第7步:
请注意,Salesforce的可用性很高.
第8步:
按继续.您最终拥有client_id密钥(标记为"Consumer Key")和client_secret(标记为"Consumer Secret").
第9步:
可是等等!你还没有完成; 选择"管理",然后选择"修改政策"
确保IP放宽设置为放宽IP限制,
并确保将Permitted Users设置为"所有用户可以自我授权.",
并确保已设置安全性>网络访问>可信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"
Run Code Online (Sandbox Code Playgroud)
在沙箱或测试:
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"
Run Code Online (Sandbox Code Playgroud)
笔记:
如果您正在构建一个多租户应用程序,用户需要授权自己的应用程序,则不应该进行密码授权.使用Oauth2工作流程.
您可能需要传入附加到密码的安全令牌.
dot*_*kow 14
我们也有这个问题.
检查您的Connected App设置 - 在下Selected OAuth Scopes,您可能需要调整所选权限.我们的应用程序主要使用Chatter,因此我们必须添加两者:
chatter_api)refresh_token).同样,您的里程可能会有所不同,但会根据您的应用程序的功能/需求尝试不同的权限组合.
此外,invalid_grant由于IP限制,似乎发生了实际错误.确保允许运行OAuth身份验证代码的服务器的IP地址.我发现如果SFDC环境设置了IP限制设置Enforce IP restrictions(Setup- > Administer- > Manage Apps- >Connected Apps),那么每个用户配置文件也必须具有允许的IP地址.
小智 8
对于OAuth 2令牌,如果您登录...
login.salesforce.com使用https://login.salesforce.com/services/oauth2/tokentest.salesforce.com使用https://test.salesforce.com/services/oauth2/token当我打电话给curl https://login.salesforce.com/services/oauth2/token -d "...credentials..."它时,仍然失败:
{"error":"invalid_grant","error_description":"authentication failure"}
当专门阅读Salesforce中的《深入研究OAuth 2.0》时,意识到存在不同的OAuth环境(添加了重点):
OAuth 2.0身份验证端点
OAuth端点是用于向Salesforce进行OAuth身份验证请求的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要求在2017年7月22日之前升级到TLS 1.1或更高版本,以便与安全性和数据完整性的行业最佳实践保持一致: 来自help.salesforce.com.
尝试添加此代码:
System.Net.ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
Run Code Online (Sandbox Code Playgroud)
另一种选择是编辑注册表:
[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
Run Code Online (Sandbox Code Playgroud)
请查看此链接以获取更多详细解答: .NET 4.5中的默认SecurityProtocol
小智 6
使用密码和安全令牌的组合替换您的 Salesforce 密码。例如,如果您的密码是“MyPassword”并且您的安全令牌是“XXXXXX”,则您需要在密码字段中输入“MyPasswordXXXXXX”。
如果您没有安全令牌,您可以按如下方式重置它。
要将IP地址范围列入白名单,请按照以下步骤操作:
Setup右上角Administer> Security Controls> Network Access从左侧导航NewSave| 归档时间: |
|
| 查看次数: |
50042 次 |
| 最近记录: |