Dokumentace Domluvit pilot

Konfigurace ověřování pomocí tokenu

Autentizace pomocí tokenu umožňuje omezit přístup k dokumentům, souborům a médiím pouze na vybrané uživatele, aniž by se museli registrovat. To pomáhá chránit placený nebo omezený obsah před stahováním bez souhlasu a neoprávněným sdílením.

Ověřování pomocí tokenu můžete nakonfigurovat dvěma způsoby: přes Cloudflare Workers nebo přes vlastní pravidla.

Možnost 1: Konfigurace pomocí Cloudflare Workers

Dva různé způsoby implementace ověřování pomocí tokenu najdete v následujících zdrojích Cloudflare Workers:

Chcete-li začít pracovat s Workers, přečtěte si Šablony.

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

Použijte Rules language is_timed_hmac_valid_v0() ověřovací funkce HMAC pro ověřování tokenů hash-based message authentication code (HMAC) ve výrazu vlastního pravidla.

Chcete-li ověřit autentizaci pomocí tokenu, vytvořit vlastní pravidlo pomocí volání is_timed_hmac_valid_v0() funkci ve výrazu pravidla. Můžete použít akci, jako je Block.

Příklad pravidla

Tento příklad ukazuje pravidlo, které zablokuje každého návštěvníka, jenž neprojde ověřením klíče HMAC u konkrétního hostitelského názvu a cesty URL. Mezi údaje potřebné pro ověřování pomocí tokenu patří:

Uvažujme následující příklad adresy URL:

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

Kde:

Výraz pro vlastní pravidlo by mohl vypadat podobně jako v následujícím příkladu:

(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é adresy URL) zahrnují:

is_timed_hmac_valid_v0() funkce porovnává hodnotu MAC vygenerovanou pomocí mysecrettoken tajný klíč na hodnotu zakódovanou v http.request.uri.

Pokud se hodnoty MAC shodují a token ještě 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í tokenu HMAC

Následující příklady ukazují, jak byste mohli generovat tokeny na svém origin serveru pro cestu ověřenou pomocí vlastního pravidla popsaného 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.

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

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

verify=1484063787-9JQB8vP1z0yc5DEBnH6JGWM3mBmvIeMrnnxFi3WtJLE%3D

K URL, kterou chráníte, budete muset připojit tento parametr:

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

Otestování vygenerovaného parametru tokenu

Pokud máte plán Enterprise, můžete otestovat, zda origin server generuje URL adresy správně, následujícím postupem:

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

Chránit více cest pomocí stejného tajného klíče

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

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

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

Upozorňujeme, že ačkoli lze pro ověření několika cest použít stejný tajný klíč, pro každou jedinečnou zprávu, kterou chcete ověřit, musíte vygenerovat token HMAC.

Chránit celý prefix cesty URI jedinou signaturou

Celý prefix cesty URI s pevnou délkou můžete chránit jediným podpisem HMAC (ten by také používal stejný tajný klíč). Chcete-li toho dosáhnout, zadejte prefix cesty URI (místo celé cesty URI) a původní řetězec dotazu jako MessageMAC argument pro is_timed_hmac_valid_v0() .

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

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

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

V takovém případě byste museli pro každý odlišný prefix cesty URI o délce 51 znaků použít jiný podpis HMAC.

Pokud byste chtěli blokovat požadavky na soubory případové studie, které neprojdou ověřením HMAC, můžete 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

Příklady cest 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ě cesty URI mohou používat stejný podpis HMAC, protože sdílejí stejný 51znakový prefix (/case-studies/12345678-90ab-4cde-f012-3456789abcde/), které vlastní pravidlo ověřuje.

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

Požádejte o pilot zdarma

Domluvit pilot