INTEGRITY Dokumentace

Konfigurace autentizace tokenem

Autentizace tokenem umožňuje omezit přístup k dokumentům, souborům a médiím na vybrané uživatele, aniž by se museli registrovat. Pomáhá to chránit placený/omezený obsah před vykrádáním a neoprávněným sdílením.

Ověřování tokenů lze nakonfigurovat dvěma způsoby: přes Cloudflare Workers, nebo přes vlastní pravidla.

Možnost 1: Konfigurace pomocí Cloudflare Workers

Dvě různé implementace autentizace tokenem najdete v následujících zdrojích Cloudflare Workers:

Začít s Workers můžete podle Šablony.

Možnost 2: Konfigurace pomocí vlastních pravidel

Použijte jazyk Rules is_timed_hmac_valid_v0() funkci pro validaci HMAC k ověřování tokenů typu hash-based message authentication code (HMAC) ve výrazu vlastního pravidla.

K validaci ověřování tokenů vytvořit vlastní pravidlo voláním is_timed_hmac_valid_v0() (funkci) ve výrazu pravidla. Můžete použít akci, jako je Block.

Ukázkové pravidlo

Tento příklad ilustruje pravidlo, které blokuje každého návštěvníka, který neprojde validací HMAC klíče na konkrétním hostname a URL cestě. Údaje potřebné pro autentizaci tokenem zahrnují:

Zvažte následující příklad URL:

downloads.example.com/images/cat.jpg?verify=1484063787-9JQB8vP1z0yc5DEBnH6JGWM3mBmvIeMrnnxFi3WtJLE%3D

Kde:

Výraz vlastního pravidla by vypadal podobně jako následující:

(http.host eq "downloads.example.com" and not is_timed_hmac_valid_v0("mysecrettoken", http.request.uri, 10800, http.request.timestamp.sec, 8))

Součásti tohoto ukázkového vlastního pravidla (s použitím předchozí ukázkové URL) zahrnují:

The is_timed_hmac_valid_v0() funkce porovnává hodnotu MAC vygenerovaného pomocí mysecrettoken tajný klíč hodnotě zakódované v http.request.uri.

Pokud se hodnoty MAC shodují a token dosud nevypršel, podle následujícího vzorce:

http.request.timestamp.sec < (<TIMESTAMP_ISSUED> + 10800)

Pak je token platný a is_timed_hmac_valid_v0() vrací true.


Generování HMAC tokenů

Následující příklady ukazují, jak byste mohli na svém origin serveru generovat tokeny pro cestu ověřovanou vlastním pravidlem popsaným v předchozí části:

import hmac
import base64
import time
import urllib.parse
from hashlib import sha256

message = "/images/cat.jpg"
secret = "mysecrettoken"
separator = "verify"
timestamp = str(int(time.time()))
digest = hmac.new((secret).encode('utf8'), "{}{}".format(message, timestamp).encode('utf8'), sha256)
token = urllib.parse.quote_plus(base64.b64encode(digest.digest()))
print("{}={}-{}".format(separator, timestamp, token))
import hmac
import base64
import time
import urllib
from hashlib import sha256

message = "/images/cat.jpg"
secret = "mysecrettoken"
separator = "verify"
timestamp = str(int(time.time()))
digest = hmac.new(secret, message + timestamp, sha256)
param = urllib.urlencode({separator: '%s-%s' % (timestamp, base64.b64encode(digest.digest()))})
print(param)
<?php
$message = "/images/cat.jpg";
$secret = "mysecrettoken";
$separator = "verify";
$timestamp = time();
$token = urlencode(base64_encode(hash_hmac("sha256", $message . $timestamp, $secret, true)));
echo("{$separator}={$timestamp}-{$token}");

Úplný příklad v JavaScriptu (JS) nebo TypeScriptu (TS) najdete v Podepisování požadavků příklad v dokumentaci Workers.

Protože je ukázková implementace v JS/TS kompatibilní s is_timed_hmac_valid_v0() funkce, požadavky autentizované pomocí poskytnutého zdrojového kódu lze ověřit vlastním pravidlem WAF a is_timed_hmac_valid_v0() funkci.

Tím se vygeneruje parametr URL podobný následujícímu:

verify=1484063787-9JQB8vP1z0yc5DEBnH6JGWM3mBmvIeMrnnxFi3WtJLE%3D

Tento parametr budete muset připojit k URL, kterou chráníte:

/images/cat.jpg?verify=1484063787-9JQB8vP1z0yc5DEBnH6JGWM3mBmvIeMrnnxFi3WtJLE%3D

Otestování vygenerovaného parametru tokenu

Pokud máte plán Enterprise, můžete následujícím postupem otestovat, zda se URL na origin serveru generují správně:

  1. Nastavte akci vlastního pravidla na Log.
  2. Zkontrolujte vzorkované logy v Security Events.

Ochrana několika cest stejným tajným klíčem

Stejný tajný klíč můžete použít k ochraně několika URI cest.

To ilustruje předchozí příklad, kde http.request.uri se předává jako MessageMAC argument validační funkci.

Protože http.request.uri zahrnuje cestu k assetu a tato hodnota se extrahuje pro každý požadavek, validační funkce vyhodnocuje všechny URI požadavků na downloads.example.com pomocí stejného tajného klíče.

Upozorňujeme, že ačkoli můžete stejný tajný klíč použít k autentizaci několika cest, musíte vygenerovat HMAC token pro každou unikátní zprávu, kterou chcete autentizovat.

Ochrana celého prefixu URI cesty jediným podpisem

Celý prefix cesty URI s pevnou délkou můžete chránit jediným HMAC podpisem (použil by také stejný secret). Toho dosáhnete zadáním prefixu cesty URI (místo celé cesty URI) a původního query stringu jako MessageMAC argument pro is_timed_hmac_valid_v0() funkci.

Použijte substring() funkci k získání prefixu z úplné cesty URI.

V následujícím příkladu má prefix cesty URI vyžadující jediný HMAC podpis vždy 51 znaků (x je zástupný znak):

/case-studies/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/

V tomto případě byste museli použít jiný HMAC podpis pro každý odlišný prefix URI cesty délky 51.

Pokud byste chtěli blokovat požadavky na soubory případových studií, které neprojdou HMAC validací, mohli byste vytvořit vlastní pravidlo podobné následujícímu:

Výraz pravidla:

  (http.host eq "downloads.example.com" and starts_with(http.request.uri.path, "/case-studies") and not is_timed_hmac_valid_v0("mysecrettoken", concat(substring(http.request.uri.path, 0, 51), "?", http.request.uri.query), 10800, http.request.timestamp.sec, 1))

Akce:

  • Block

Ukázkové cesty URI platných příchozích požadavků:

/case-studies/12345678-90ab-4cde-f012-3456789abcde/foobar-report.pdf?1755877101-5WOroVcDINdl2%2BQZxZFHJcJ6l%2Fep4HGIrX3DtSXzWO0%3D
/case-studies/12345678-90ab-4cde-f012-3456789abcde/acme-corp.pdf?1755877101-5WOroVcDINdl2%2BQZxZFHJcJ6l%2Fep4HGIrX3DtSXzWO0%3D
/case-studies/768bf477-22d5-4545-857d-b155510119ff/another-company-report.pdf?1755878057-jeMS5S1F3MIgxvL61UmiX4vODiWtuLfcPV6q%2B0Y3Rig%3D

První dvě URI cesty mohou používat stejný HMAC podpis, protože sdílejí stejný 51znakový prefix (/case-studies/12345678-90ab-4cde-f012-3456789abcde/), který je ověřován vlastním pravidlem.

Třetí URI cesta potřebuje jiný HMAC podpis, protože prefix je odlišný.