Неподдерживаемый тип гранта Salesforce OAUTH2 - PullRequest
0 голосов
/ 30 ноября 2018

Я использую 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 голосов
/ 01 декабря 2018

Вы используете "Имя пользователя-пароль потока" .Все параметры в URL, без отображения всплывающего окна, позволяющего пользователю вводить свои учетные данные прямо в SF (в идеале, если есть взаимодействие с пользователем, а не бэкэнд-системы, общающиеся друг с другом, вы должны использовать другой поток OAuth , чтобы ваше приложениене обрабатывает пароли, не может их утечь).

Устранение неполадок:

  1. Убедитесь, что username в вашем запросе закодировано.По крайней мере, поставьте %40 вместо @.Если ваша попытка даже не отображается в истории входа пользователя - неверное / неправильно закодированное имя пользователя.
  2. Вам может понадобиться маркер безопасности, также незаметно добавленный к паролю (опять же, посмотрите историю входа пользователя, возможно, там есть)Сбой: требуется маркер безопасности API ").
  3. Если вы используете функцию« Настройка »->« Мой домен », проверьте, разрешено ли входить в систему с общего номера login.salesforce.com.Возможно, ваша организация отключила его и разрешает использовать только фирменный домен входа (это также повлияет на доступ к API).Или, может быть, ваши администраторы разрешают входить только с определенных IP-адресов ...
  4. Также вам не нужно добавлять Authorization: Basic + username и передавать этот вызов, вы передаете его в полезной нагрузке POST, и этого достаточно.

Если у вас есть Postman, curl, SoapUI или любой другой подобный клиент - может помочь перед переходом прямо к VBA?

Это работает для меня (с заголовком Content-Type: application/x-www-form-urlencoded)

Sample Postman request (censored)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...