Salesforce身份验证失败
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Salesforce身份验证失败相关的知识,希望对你有一定的参考价值。
我正在尝试使用OAuth身份验证来获取Salesforce身份验证令牌,所以我引用了wiki docs,但在获得授权代码后,当我发出带有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());
如果有例外,请回复
对于那些像我一样陷入困境和沮丧的人,我在整个过程中留下了一篇详细的博客文章(附图片和评论!)。如果您需要,请单击该链接:
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"
在沙箱或测试:
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工作流程。
- 您可能需要传入附加到密码的安全令牌。
我们也有这个问题。
检查已连接的应用程序设置 - 在选定的OAuth范围下,您可能需要调整所选的权限。我们的应用程序主要使用Chatter,因此我们必须添加两者:
- 访问和管理Chatter摘要(
chatter_api
) - 代表您随时执行请求(
refresh_token
)。
同样,您的里程可能会有所不同,但会根据您的应用程序的功能/需求尝试不同的权限组合。
此外,由于IP限制,似乎发生了实际的invalid_grant
错误。确保允许运行OAuth身份验证代码的服务器的IP地址。我发现如果SFDC环境具有IP限制设置强制IP限制设置(设置 - >管理 - >管理应用程序 - >连接的应用程序),则每个用户配置文件也必须具有允许的IP地址。
Salesforce要求在2017年7月22日之前升级到TLS 1.1或更高版本,以便与行业最佳安全和数据完整性实践保持一致:from help.salesforce.com。
尝试添加此代码:
System.Net.ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
另一种选择是编辑注册表:
[HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFrameworkv4.0.30319]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoft.NETFrameworkv4.0.30319]
"SchUseStrongCrypto"=dword:00000001
请查看此链接以获取更多详细解答:Default SecurityProtocol in .NET 4.5
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 "Set Up OAuth 2.0"
- 凭证是正确的(许多字符检查)
- 当我打电话给
curl https://login.salesforce.com/services/oauth2/token -d "...credentials..."
时,它仍然失败了:{"error":"invalid_grant","error_description":"authentication failure"}
解:
实现了在特别阅读Digging Deeper into OAuth 2.0 in Salesforce时有不同的OAuth环境(强调添加):
OAuth 2.0 Authentication Endpoints
OAuth端点是您用于向Salesforce发出OAuth身份验证请求的URL。当您的应用程序发出身份验证请求时,请确保您使用的是正确的Salesforce OAuth端点。主要终点是:
- 授权 - https://login.salesforce.com/services/oauth2/authorize
- 令牌https://login.salesforce.com/services/oauth2/token
- Revoke-https://login.salesforce.com/services/oauth2/revoke(有关撤消访问权限的详细信息,请参阅撤销OAuth令牌)
客户还可以在这些端点中使用My Domain,社区或test.salesforce.com(沙箱)域,而不是login.salesforce.com。
固定
因为我通过test.salesforce.com
登录我的环境切换到curl https://test.salesforce.com/services/oauth2/token -d "...credentials..."
导致“恭喜!(> ^ _ ^)>给OAuth令牌响应”
要将IP地址范围列入白名单,请执行以下步骤:
- 点击右上方的
Setup
- 从左侧导航栏中选择
Administer
>Security Controls
>Network Access
- 点击
New
- 添加您的IP地址范围
- 点击
Save
使用密码和安全令牌的组合替换Salesforce密码。例如,如果您的密码是“MyPassword”且您的安全令牌是“XXXXXX”,则需要在密码字段中输入“MyPasswordXXXXXX”。
如果您没有安全令牌,可以按如下方式重置它。
- 转到您的姓名 - >我的设置 - >个人 - >重置我的安全令牌。
如果在访问令牌设置中输入消费者密钥和消费者密钥,则可以使用Postman呼叫您的APEX控制器 - 您不需要安全令牌。
像这个截图一样设置授权......
在点击获取新访问令牌按钮后,在窗口中输入您的凭据...
然后点击Request Token按钮生成一个令牌,然后点击Use Token按钮,它将填充Authorization选项卡上的Access Token字段,点击Get New Access Token按钮。
我正撞着桌子试图让这个工作起来。原来我的问题是复制和粘贴,这搞砸了“角色。我去手动输入”粘贴到命令行然后它工作。
我正在使用具有以下请求格式的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>
以上是关于Salesforce身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google 作为身份提供者的 Salesforce 的 Api 身份验证
SalesForce.com Rest API身份验证。它是否允许双腿oauth交易