Преобразование команды запроса cURL в Coldfusion (cfhttp)

Я пытаюсь имитировать следующий запрос cURL, используя ColdFusion CFHTTP.

curl -u myCl13nt1D:my53cR3tK3Y -X POST --data "grant_type=password&username=x&password=y" https://www.sitename.net/token
<cfhttp url="https://www.sitename.net/token" method="post" username="x" password="y">
  <cfhttpparam type="url" name="client_id"     value="myCl13nt1D" />
  <cfhttpparam type="url" name="client_secret" value="my53cR3tK3Y" />

  <!--- attempt 1 - without using cfhttp username/password attributes
  <cfhttpparam type="formfield" name="grant_type" value="password" />
  <cfhttpparam type="formfield" name="username" value="x" />
  <cfhttpparam type="formfield" name="password" value="y" /> 
  --->
  <!--- attempt 2 - without using cfhttp username/password attributes
  <cfhttpparam type="formField" name="data" value="grant_type=password&username=x&password=y" />
  --->

  <!--- attempt 3 - using cfhttp username/password attributes --->
  <cfhttpparam type="formField" name="data" value="grant_type=password" />
</cfhttp>

В командной строке запрос cURL работает, возвращая ожидаемый результат, но с помощью CFHTTP я получаю следующую ошибку (код состояния 401 Unauthorized)

{"error":"unauthorized_client","error_description":"That application is not registred or blocked"}

Я пытался разными способами передать необходимые параметры, но все они возвращают одну и ту же ошибку.


person david-l    schedule 30.08.2016    source источник
comment
Попробуйте опубликовать свой CURL как есть на странице CF и запишите все переменные запроса, а затем посмотрите, сможете ли вы сопоставить их таким образом. Неизвестным может быть имя пользователя, которое передается в заголовке. Сайт также может ожидать другого агента или что-то еще... Это нелегко сказать, но сообщение об ошибке заставляет меня думать, что что-то - какой-то токен или что-то еще - отсутствует.   -  person Mark A Kruger    schedule 31.08.2016
comment
разве это не должно быть username="myCl13nt1D" password="my53cR3tK3Y" в <cfhttp>?   -  person Henry    schedule 31.08.2016


Ответы (1)


-u myCl13nt1D:my53cR3tK3Y – это BasicAuth, который разделен на атрибуты username/password в cfhttp. Попробуйте это вместо этого:

<cfhttp url="https://www.sitename.net/token" method="post" username="myCl13nt1D" password="my53cR3tK3Y">
  <cfhttpparam type="formfield" name="grant_type" value="password" />
  <cfhttpparam type="formfield" name="username"   value="x"        />
  <cfhttpparam type="formfield" name="password"   value="y"        />
</cfhttp>

Глядя на этот запрос, вы аутентифицированы с помощью BasicAuth и авторизованы с помощью механизма входа в систему с именем пользователя и паролем конечной точки, скорее всего, OAuth2.

person Alex    schedule 30.08.2016
comment
Спасибо, Алекс/Генри, я не знал, что это так. - person david-l; 31.08.2016