Попытка использовать/вызвать рестлет NetSuite с аутентификацией на основе токенов с использованием Delphi RESTClient. У меня есть рабочий запрос Postman, который проверяет все необходимые параметры авторизации. Один отсутствующий параметр — область — при добавлении в код изменяет сообщение об ошибке, возвращаемое со стороны NetSuite, но все равно не приводит к успешному вызову.
procedure TForm1.OAuth1Authenticator1Authenticate(ARequest: TCustomRESTRequest;
var ADone: Boolean);
begin
// XXXXXXX_RP is a NetSuite account number and environment
ARequest.AddAuthParameter('realm','XXXXXX_RP',pkQUERY);
end;
Если область не добавлена (приведенный выше код закомментирован), возвращаемое оставшееся содержимое:
error code: USER_ERROR
error message: header is not NLAuth scheme [ OAuth oauth_consumer_key="fe8da7b31dccbd47e90e5dd5e641fe7b0cbff032a951b4058618c207caf569f8", oauth_nonce="c98fa9de2c601f45bdc8d5c640f1b3cf", oauth_signature_method="HMAC-SHA1", oauth_signature="PfCQE3A4DicTtCfpBEPmbSOmqNg%3D", oauth_timestamp="1568639138", oauth_token="a8190ba34e223f25b32cdb4837d9e1973b8fd6208804e93306f4618ccdb6d648", oauth_version="1.0" ]
С добавлением области я все еще получаю:
error code: INVALID_LOGIN_ATTEMPT
error message: Invalid login attempt.
Кто-нибудь успешно звонил в рестлеты NetSuite с помощью Delphi RESTClient?
Обновление: похоже, он не поддерживает использование необязательного параметра области. При добавлении вручную он добавляется в список нормализованных параметров для подписи, когда этого не должно быть. Я изменил TOAuth1SignatureMethod_HMAC_SHA1.BuildSignature
в REST.Authenticator.OAuth
, чтобы пропустить этот параметр (просто добавил блок if Lparam.Name <> 'realm' then begin .. end;
вокруг некоторого кода), но все равно не удалось успешно выполнить запрос к NetSuite. Сделал это после прочтения https://oauth.net/core/1.0/ раздела 9.1.1. Нормализация параметров запроса:
Параметры запроса собираются, сортируются и объединяются в нормализованную строку:
- Параметры в заголовке авторизации HTTP OAuth за исключением параметра области.
- Параметры в теле запроса HTTP POST (с типом содержимого application/x-www-form-urlencoded).
- Параметры HTTP GET добавляются к URL-адресам в части запроса (как определено в разделе 3 [RFC3986]).