Аутентификация и авторизация

vCDN поддерживает разные уровни доступа:

Например, можно создать отдельный аккаунт только для работы с файлами, или только с доступом к статистике.

API имеет древовидную структуру: /class/action (или /class/action/specific в некоторых случаях) - для ограниченных логинов можно запретить/разрешить доступ к ветке в целом или к отдельному её элементу.
Более специфичное правило имеет приоритет - можно запретить доступ к /file/delete, даже если разрешен доступ к ветке /file/

На текущий момент поддерживается два способа аутентификации:

Логин/пароль

Обычная plain http аутентификация. Можно выполнять запрос к API прямо в браузере (например, прочитать документацию к конкретному вызову).
В скриптах можно использовать урлы вида https://login:password@cp.ahcdn.com/ (если возможна прослушка трафика, то рекомендуется использовать https, но можно использовать и http, чтобы сократить задержку).
Либо можно воспользоваться специальными опциями или переменными окружения для указания логина/пароля для соответствующих утилит (wget, curl, ..)
Или же можно самостоятельно сформировать http-заголовок Authentication и передавать его при выполнении API-запроса:

# LOGIN=customer-role
# PASS=qwerty
# AUTH=`echo -n "$LOGIN:$PASS" | base64 -e`
# wget -O - --header='Accept-Encoding: *,gzip' --header="Authorization: Basic $AUTH" 'https://cp.ahcdn.com/api2/file/list'

Одноразовый токен (OTP - one time password)

Токен передается как GET или POST параметр запроса в API вызов.
После проверки он запоминается (помещается в кеш) и повторные вызовы с его использованием будут отвергаться.

OTP имеет следующий вид:

LOGIN:EXPIRE:SALT:AUTH

Пример вызова API c OTP

http://cp.ahcdn.com/api2/file/list?otp=login:1234567890:saltsalt:4e75803b98d555c986f2752fcb11d317&format=text&fields=id,status&filter_full_name=1/2/345.mp4

Пример генерации OTP на PHP

<?php
function api_otp() {
        $LOGIN = 'login';
        $PASSWORD = 'password';
        $EXPIRE = time() + 300;        
        $rnd_str = '';
        for ($i=1; $i<=6; $i++) {
              $rnd_str = $rnd_str . chr(rand(0,255));
        }
        $SALT = strtr(base64_encode($rnd_str), '/', ',');
        $AUTH = md5("$EXPIRE:$SALT:$PASSWORD");
        return  "$LOGIN:$EXPIRE:$SALT:$AUTH";
}
?>