Я пишу инструмент для API плагина Woocommerce, который является одним из плагинов WordPress. Этот инструмент использует для аутентификации систему OAuth 1.0. Когда я устанавливаю свой запрос и отправляю его через Postman, я могу без проблем получить ответ. Моя проблема начинается в тестовом приложении, которое я написал сам. Когда я создаю подпись с теми же значениями, что и в Postman, я нахожу другое значение из инструмента Postman.
В документе указано несколько базовых строк. Я шифрую это значение указанным ключом и создаю подпись. Эта подпись совпадает с подписью на документе. Итак, отсюда я могу понять, что мой тестовый инструмент работает без сбоев. (https://oauth.net/core/1.0a/#RFC2045 — Приложение A.5.2. Расчет значения подписи)
Когда я добавляю значения, которые я получаю от Postman с помощью того же инструмента, в свой тестовый инструмент, я получаю разные результаты. Мне пришло в голову, что инструмент Postman добавил еще один параметр.
Мои ценности Почтальона:
Я могу работать с этими значениями без проблем. Добавляю те же значения в тестовое приложение и получаю вывод;
Почтальон: tcBdkwXJL9Ad5RZFTQ36Vh34mYM=
Мое тестовое приложение: UJ2it9opCslL0Jjy7/T/C7Dw8rc=
Я разрабатываю соответствующее тестовое приложение с Delphi. Если вам нужны коды, я поделился ими ниже.
procedure TForm1.Button1Click(Sender: TObject);
var
p1, p2, full: string;
begin
p1 := cmbReqType.Text;
p2 := TNetEncoding.URL.Encode(edit1.Text);
p3 := 'oauth_consumer_key=' + oauth_consumer_key.Text
+ '&oauth_signature_method='+oauth_signature_method.Text
+ '&oauth_timestamp='+oauth_timestamp.Text +
'&oauth_nonce=' + oauth_nonce.Text +
'&oauth_version='+ oauth_version.Text;
xp3 := p3;
p3 := TNetEncoding.URL.Encode(p3);
full := p1 + '&' + p2 + '&' + p3;
Memo1.Lines.Text := System.UTF8Encode(Trim(full));
HMAC_SHA1 := THashSHA1.Create;
Edit2.text := TNetEncoding.Base64.EncodeBytesToString(HMAC_SHA1.GetHMACAsBytes(TEncoding.UTF8.GetBytes(Trim(memo1.text)), TEncoding.UTF8.GetBytes(Trim(secret_key.Text))));
if Trim(Edit2.Text) = 'tcBdkwXJL9Ad5RZFTQ36Vh34mYM=' then
begin
ShowMessage('correct.');
end else
begin
ShowMessage('not correct.');
end;
end;
P.S. Забудьте об уродстве в коде. Я закодировал это тривиально :)
P.S. Подобные темы оставляю ниже. Большинство не отвечает на ответ.
1- Как просмотреть необработанную подпись, которую Postman использует при выполнении запросов OAuth?
2- Как почтальон отдыхает Клиент создает подпись Oauth? Не удалось разрешить Oauth_Signature в Android
...
Заранее спасибо за вашу помощь в этом.
oauth_nonce
должен идти сразу послеoauth_consumer_key
(поскольку параметры должны быть отсортированы по имени). - person Olivier   schedule 13.07.2021cs_9388....58aa464845&
. Если вы добавите это как ответ, я бы хотел одобрить и проголосовать. - person Halil Han Badem   schedule 13.07.2021