不支持的授权类型Salesforce OAUTH2

时间:2018-11-30 13:11:39

标签: vba salesforce authorization

我正在使用VBA在Salesforce中获得授权,然后最终希望运行Salesforce报表并将结果转储到Excel中。我已经编写了以下内容来处理授权,但是却遇到了unsupported_grant_type错误。到目前为止,我拥有的代码:

Dim XMLHTTP As New MSXML2.XMLHTTP60
Dim username As String
Dim password As String
Dim PasswordnUsername As String
Dim argumentString As String

username = "myUsername"
password = "myPassword"

PasswordnUsername = password & ":" & username

argumentString = "?grant_type=password&" & _ 
                "client_id=abc123&" & _
                "client_secret=123abc&" & _
                "username=" & username & "&password=" & password
MsgBox (argumentString)

Set XMLHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
XMLHTTP.Open "POST", "https://mysalesforce.com/services/oauth2/token", False

XMLHTTP.setRequestHeader "content-type", "application/x-www-form-urlencoded"
XMLHTTP.setRequestHeader "Authorization", "basic " + Base64Encode(PasswordnUsername)

XMLHTTP.send (argumentString)

MsgBox (XMLHTTP.responseText)

当我打印XMLHTTP.responseText时,这是报告unsupported_grant_type的地方。

任何帮助将不胜感激。预先感谢。

T

1 个答案:

答案 0 :(得分:1)

您正在使用"Username-password flow"。 URL中的所有参数,而不显示弹出窗口,让用户直接将其凭据直接输入SF(理想情况下,如果存在用户交互,而不是后端系统互相通信,则您应该使用another OAuth flow,因此您的应用无法处理密码,不能泄露密码。)

故障排除:

  1. 确保请求中的username已编码。至少要放%40而不是@。如果您的尝试甚至未在用户的登录历史记录中显示-用户名错误/编码错误。
  2. 您可能还需要将安全令牌也静默地附加到密码上(再次查看用户的登录历史记录,也许有“失败:需要API安全令牌”)。
  3. 如果使用设置->我的域功能,请检查是否允许从通用login.salesforce.com登录。也许您的组织禁用了它,仅允许品牌登录域(也会影响API访问)。也许您的管理员只允许从某些IP登录...
  4. 此外,您无需添加Authorization: Basic +用户名并传递此调用,只需在POST的有效负载中传递它就足够了。

如果您有邮递员,curl,SoapUI或类似的客户端-在直接跳到VBA之前可能会有所帮助?

这对我有用(带有Content-Type: application/x-www-form-urlencoded标头)

Sample Postman request (censored)