Как выполнить HMA C проверку API-запроса методом GET - PullRequest
0 голосов
/ 06 апреля 2020

Я унаследовал некоторый код, который использует проверку HMA C для проверки запросов POST. Данные POST кодируются в источнике через HMA C с предварительным общим секретом, и это добавляется в заголовок. Заголовок читается на нашей принимающей стороне и сравнивается. Это прекрасно работает.

Однако мы расширим это до GET-запросов. Очевидно, что запросы GET не имеют тела, поэтому кодирование пустого тела для каждого запроса каждый раз будет приводить к одинаковому заголовку hma c и будет принципиально небезопасным.

Я имею в виду, например, добавление заголовка datetime и кодирование этого заголовка в источнике и сравнение в месте назначения, затем ограничение доступа к небольшому временному окну примерно в это время. Однако это только оставляет чуть меньшую дыру в безопасности.

Как HMA C auth обычно работает на запрос GET, учитывая, что у них нет тела для кодирования?

Спасибо

1 Ответ

0 голосов
/ 02 мая 2020

Вы можете поделиться примером кода, чтобы узнать, как вы реализуете это:

"Я унаследовал некоторый код, который использует проверку HMA C для проверки запросов POST. Данные POST кодируются в источнике через HMA C с предварительным общим секретом, и это добавляется в заголовок. Заголовок - это чтение на нашей принимающей стороне и сравнение. Это прекрасно работает. "

Я реализовал функцию для проверки запроса HMA C точно так, как предложил Docusign:

 public bool HashIsValid(string hmacKey, string xmlbody, string hmacSignature)
    {
        string result = ComputeHash(hmacKey, xmlbody);
        return result.Equals(hmacSignature);            
    }
    public string ComputeHash(string hmacKey, string xmlbody)
    {
        byte[] bytes = Encoding.UTF8.GetBytes(hmacKey);
        System.Security.Cryptography.HMAC hmac = new System.Security.Cryptography.HMACSHA256(bytes);
        bytes = Encoding.UTF8.GetBytes(xmlbody);
        bytes = hmac.ComputeHash(bytes);
        return Convert.ToBase64String(bytes);
    }

Я уверен, что я установил правильный hmacKey (общий ключ из моей учетной записи Docusign), правильный hmacSignature (x-docusign-signature-1) и правильный (все строки) XML body body, но эти функции возвращают разные значения ha sh: результат всегда отличается от hmacSignature. Я что то пропустил? заранее спасибо!

...