Быстрая аутентификация токена CDN для запросов с пользовательским VCL

Мы искали варианты для защиты наших закодированных видео, хранящихся в GCS и распространяемых через службу CDN Fastly.

Итак, после этого поста - https://docs.fastly.com/guides/tutorials/enabling-url-token-validation

Мы нашли интересную библиотеку для создания токена JWT внутри подпрограммы VCL.

Теперь, когда мы пытаемся попасть в домен - http://cdn.urtutors.com.storage.googleapis.com.global.prod.fastly.net/generate

Он генерирует токен JWT и успешно проходит его проверку здесь - http://cdn.urtutors.com.storage.googleapis.com.global.prod.fastly.net/generate

Но мы хотим перенести генерацию токенов JWT в наши бэкэнд-сервисы, и для этого мы хотим сгенерировать этот токен JWT на нашей стороне сервера и просто использовать часть проверки здесь, в VCL. Теперь я не совсем уверен, почему здесь используется "base64url_nopad" и каковы его альтернативы в node.js, но я думаю, что лучшим вариантом будет просто использовать что-то подобное, например - https://www.npmjs.com/package/jsonwebtoken

для генерации токена jwt с нашей стороны, но как мы можем проверить то же самое с дайджест-объектом в VCL здесь -

set req.http.X-JWT-Header = re.group.1;
        set req.http.X-JWT-Payload = re.group.2;
        set req.http.X-JWT-Signature = digest.base64url_nopad_decode(re.group.3);
        set req.http.X-JWT-Valid-Signature = digest.hmac_sha256("SupSecretStr", 
        req.http.X-JWT-Header "." req.http.X-JWT-Payload);

        // Validate signature
        if(digest.secure_is_equal(req.http.X-JWT-Signature, req.http.X-JWT-Valid-Signature)) {
            // Decode payload
            set req.http.X-JWT-Payload = digest.base64url_nopad_decode(req.http.X-JWT-Payload);
            set req.http.X-JWT-Expires = regsub(req.http.X-JWT-Payload, {"^.*?"exp"\s*?:\s*?([0-9]+).*?$"}, "\1");

            // Validate expiration
            if (time.is_after(now, std.integer2time(std.atoi(req.http.X-JWT-Expires)))) {
               // Unauthorized
               error 401 "Unauthorized";
            }

            // OK
            error 902;
        }

0 ответов

Другие вопросы по тегам