Ключи аутентификации API. Определения, настройка, удаление
Определения
- Ключи аутентификации используются для доступа к API Comindware Platform из внешних систем с использованием HMAC-аутентификации.
- Ключ аутентификации следует назначать аккаунту, у которого есть разрешение «Вызовы API» в системной роли, либо пользователю входящему в системную роль «Системные администраторы». Только такие аккаунты могут использовать API Comindware Platform.
- При HMAC-аутентификации внешняя система должна передать токен и секретный ключ.
Просмотр списка и настройка ключа аутентификации
- На странице «Администрирование» в разделе «Инфраструктура» выберите пункт «Ключи аутентификации» .
- 
Отобразится список ключей.  Список ключей аутентификации 
- 
Нажмите кнопку «Создать» или дважды нажмите строку имеющегося ключа. 
- 
При создании ключа выберите аккаунт пользователя и срок действия ключа. При настройке имеющегося ключа можно только изменить его срок действия.  Настройка нового ключа аутентификации 
- 
Нажмите кнопку «Сохранить». 
- Отобразятся свойства сформированного ключа.
- 
Используйте сформированные секретный ключ и токен для аутентификации внешних систем при доступе к API Comindware Platform.  Свойства сформированного ключа аутентификации 
Примеры отправки запросов с HMAC-аутентификацией
Скрипт для Postman
Для отправки запросов с HMAC-аутентификацией в Postman:
- Создайте новый запрос и укажите метод и URL.
- Перейдите на вкладку Scripts — Pre-request.
- 
Вставьте следующий скрипт: // Укажите свой токен аутентификацииconst credential = '*******';// Укажите свой секретный ключconst secret = '******************************';// Функция подписания запросаconst signRequest = (host,method, // HTTP-метод (GET, PUT, POST, DELETE)url, // Путь и параметры запросаbody, // Тело запроса (undefined если отсутствует)credential, // Токен аутентификацииsecretKey // Секретный ключ (base64)) => {var verb = method.toUpperCase();var utcNow = new Date().toUTCString();// Вычисляем SHA256-хеш тела запросаvar contentHash = CryptoJS.SHA256(body).toString(CryptoJS.enc.Base64);// Имена заголовков через точку с запятойvar signedHeaders = "x-ms-date;host;x-ms-content-sha256";// Формируем строку для подписиvar stringToSign =verb + '\n' + // HTTP-методurl + '\n' + // Путь и параметрыutcNow + ';' + host + ';' + contentHash; // Значения подписанных заголовковconsole.log('string to sign', stringToSign);// Вычисляем подпись в формате MAC-SHA256var secret = CryptoJS.enc.Base64.parse(secretKey);var signature = CryptoJS.HmacSHA256(stringToSign, secret).toString(CryptoJS.enc.Base64);// Возвращаем заголовки для аутентификацииreturn [{ key: "x-ms-date", value: utcNow },{ key: "x-ms-content-sha256", value: contentHash },{ key: "Authorization", value: "HMAC-SHA256 Credential=" + credential + "&SignedHeaders=" + signedHeaders + "&Signature=" + signature },{ key: 'Content-Type', value: 'application/json' }];}// Функция интерполяции переменных Postmanconst interpolate = (value) => {const { Property } = require('postman-collection');return Property.replaceSubstitutions(value, pm.variables.toObject());}// Получаем параметры запроса из Postmanconst host = pm.request.url.getHost() + (pm.request.url.port ? ':' + pm.request.url.port : '');const method = pm.request.method;const url = pm.request.url.getPath();const bodyStr = interpolate(pm.request.body.toString());// Получаем подписанные заголовкиconst headers = signRequest(host, method, url, bodyStr ?? '', credential, secret)// Добавляем заголовки к запросуheaders.forEach((header) => pm.request.addHeader({key: header.key,value: header.value,}));
- 
Протестируйте работу запроса. 
Скрипт для PowerShell
Для отправки запросов с HMAC-аутентификацией в PowerShell используйте следующий скрипт.
# Укажите свой ттокен аутентификации 
$Credential = "********" 
# Укажите свой секретный ключ 
$Secret = "**********************"  
# Укажите URL сервера Comindware Platform 
$hostUrl = "http://localhost:80" 
# Укажите метод запроса (`GET`, `POST`, `PUT`, `DELETE`) 
$method = "POST" 
# Укажите путь к эндпоинту API Comindware Platform 
$apiUrl = "/api/public/system/Base/OntologyService/GetAxioms" 
# Составьте тело запроса (если необходимо) 
$bodyStr = "1234" 
# Функция вычисления SHA256-хеша 
function Compute-Sha256 { 
    param ( 
        [string]$inputString 
    ) 
    $bytes = [System.Text.Encoding]::UTF8.GetBytes($inputString) 
    $hashBytes = [System.Security.Cryptography.SHA256]::Create().ComputeHash($bytes) 
    return [Convert]::ToBase64String($hashBytes) 
} 
# Функция подписания запроса 
function Sign-Request { 
    param ( 
        [string]$hostParam, 
        [string]$methodParam, 
        [string]$urlParam, 
        [string]$bodyParam 
    ) 
    $verb = $methodParam.ToUpper() 
    $utcNow = [System.DateTime]::UtcNow.ToString("R") # RFC1123 формат 
    $contentHash = Compute-Sha256 $bodyParam 
    $signedHeaders = "x-ms-date;host;x-ms-content-sha256" 
    $hostOnly = $hostParam.Replace('http://','').Replace('https://','') 
    $stringToSign = "${verb}`n${urlParam}`n${utcNow};${hostOnly};${contentHash}" 
    Write-Host "String to sign: $stringToSign" 
    $secretBytes = [Convert]::FromBase64String($Secret) 
    $hmac = [System.Security.Cryptography.HMACSHA256]::new($secretBytes) 
    $signatureBytes = $hmac.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($stringToSign)) 
    $signature = [Convert]::ToBase64String($signatureBytes) 
    # Возвращаем хеш-таблицу вместо массива объектов 
    return @{ 
        "x-ms-date" = $utcNow 
        "x-ms-content-sha256" = $contentHash 
        "Authorization" = "HMAC-SHA256 Credential=${Credential}&SignedHeaders=${signedHeaders}&Signature=${signature}" 
        "Content-Type" = "application/json" 
    } 
} 
# Получаем подписанные заголовки 
$headers = Sign-Request -hostParam $hostUrl -methodParam $method -urlParam $apiUrl -bodyParam $bodyStr 
# Формируем параметры запроса 
$params = @{ 
    Uri = "$hostUrl$apiUrl" 
    Method = $method 
    # Используем готовую хеш-таблицу заголовков 
    Headers = $headers 
    ContentType = "application/json" 
} 
# Добавляем тело запроса (если есть) 
if (-not [string]::IsNullOrEmpty($bodyStr)) { 
    $params.Body = $bodyStr 
} 
# Отправляем запрос 
try { 
    $response = Invoke-RestMethod @params 
    Write-Host "Успешный ответ:`n$($response | ConvertTo-Json -Depth 10)" 
} catch { 
    Write-Host "Ошибка: $($_.Exception.Message)" 
    if ($_.Exception.Response) { 
        $reader = [System.IO.StreamReader]::new($_.Exception.Response.GetResponseStream()) 
        $reader.BaseStream.Position = 0 
        $errorResponse = $reader.ReadToEnd() 
        Write-Host "Детали ошибки: $errorResponse" 
    } 
} 
Удаление ключей аутентификации
Внимание!
После удаления ключей аутентификации аккаунты, которым они назначены, потеряют возможность использовать API Comindware Platform с HMAC-аутентификацией.
- Откройте список ключей аутентификации.
- Установите флажки в первом столбце для адаптеров, подлежащих удалению.
- Нажмите кнопку «Удалить».
- Подтвердите удаление ключей.
Эта статья была полезна 1 чел.
