← Privacy Pass / privacy-pass
Testování produkčního nasazení
Tento návod popisuje, jak získat token z vašeho nasazení provozovaného Cloudflare. V této fázi jste již s Cloudflare společně vybudovali a nasadili následující komponenty. Podle tohoto návodu ověřte, že nasazení token skutečně vydá a uplatní od začátku do konce.
Privacy Pass v současnosti není samoobslužný produkt: nasazení do produkčního prostředí probíhá formou řízené spolupráce s Cloudflare. Pokud si chcete jen vyzkoušet, jak Privacy Pass funguje, bez jakéhokoli nastavování, přejděte na Začínáme.
Kontaktujte nás ↗ a požádejte o přístup, abyste získali konfiguraci svého vydavatele.
Než začnete
Co zajišťuje Cloudflare:
- Koncový bod vydavatele (zde označovaný jako
https://your-issuer.example.com), který provozuje veřejného vydavatele splňujícího RFC 9578. - Veřejný koncový bod adresáře na
/.well-known/private-token-issuer-directory. - A
/token-requestkoncový bod.
Co provozujete nebo potřebujete mít připravené:
- Funkční Ověřovatel, tedy službu, která ověří vaše tvrzení a po ověření Klienta přepošle zaslepený požadavek na token Issuerovi. V nasazeních s Issuerem od Cloudflare Klient nikdy nekontaktuje Issuera přímo. Attestera obvykle provozujete vy sami, aby role zůstaly oddělené, ale Cloudflare vám s jeho vybudováním může pomoci. Přejděte na cloudflare/privacypass-attester ↗ pro implementaci určenou pro Cloudflare Workers.
- Origin (webová služba, aplikace nebo web, ke kterému se Klient pokouší přistoupit) nakonfigurovaný tak, aby ověřoval tokeny podle veřejného klíče vydavatele (nebo pomocí uplatnění tokenu na hraně Cloudflare).
- klientský certifikát mTLS který váš Attester používá k autentizaci u vydavatele.
- klientská knihovna pro spuštění protokolu vydávání. Mezi možnosti knihoven patří TypeScript, Go a Rust.
Implementujte Klienta pomocí knihovny Privacy Pass pro váš stack:
- TypeScript, @cloudflare/privacypass-ts ↗
- Go, cloudflare/pat-go ↗ (referenční implementace určená pro experimentální použití a testování interoperability)
- Rust, raphaelrobert/privacypass ↗ (bez nezávislého auditu)
1. Zjištění konfigurace vydavatele
Každý vydavatel zveřejňuje svou konfiguraci na standardním directory endpointu. Tento endpoint je veřejný, takže si jej můžete stáhnout, ověřit tak dostupnost vydavatele a přečíst jeho veřejné klíče:
curl https://your-issuer.example.com/.well-known/private-token-issuer-directoryOdpověď obsahuje endpoint pro žádost o token a veřejné klíče issuera. Typ tokenu 2 je Blind RSA:
{
"issuer-request-uri": "/token-request",
"token-keys": [
{
"token-type": 2,
"token-key": "<base64url-encoded public key>",
"not-before": 1700000000
}
]
}Podle těchto klíčů bude váš Origin ověřovat uplatněné tokeny.
2. Vyžádání a uplatnění tokenu
V tomto nasazení Klient nikdy nekontaktuje vydavatele přímo. Získání tokenu je zpáteční cesta přes všechny čtyři role:
- Origin vrací
WWW-Authenticatevýzvu. - Klient dokončí atestaci pomocí váš Attester a odešle mu zaslepený požadavek na token.
- Ověřovatel ověří Klienta, poté se autentizuje u vydavatele (například pomocí mTLS) a přeposílá požadavek na
/token-requestkoncový bod. - Vydavatel podepíše zaslepený požadavek a vrátí jej; Klient jej odslepí, aby získal finální token, a poté jej uplatní u Originu.
Origin Client Attester Issuer
│ │ │ │
│- TokenChallenge ─>│ │ │
│ │<=== Attestation ==>│ │
│ │ │── TokenRequest ─>│
│ │ │<─ TokenResponse ─│
│ │<── TokenResponse ──│ │
│<─ Request+Token -─│ [finalize token] │ │
│────- 200 OK ────->│ │ │V tomto příkladu Client pomocí knihovny TypeScript sestaví zaslepenou žádost o token a odešle ji vašemu Attesterovi, který ji přeposílá issuerovi a vrací podepsanou odpověď:
import { publicVerif } from '@cloudflare/privacypass-ts';
const { BlindRSAMode, Client } = publicVerif;
// Declare your own sendToAttester transport — see the note below.
declare function sendToAttester(tokenRequest: Uint8Array): Promise<Uint8Array>;
// `tokenChallenge` comes from the Origin's WWW-Authenticate header.
// `issuerPublicKey` is the issuer's public key bytes (from the directory in Step 1).
const client = new Client(BlindRSAMode.PSS);
const tokenRequest = await client.createTokenRequest(tokenChallenge, issuerPublicKey);
// Send the blinded request to your Attester. It verifies the client, proxies the
// request to the issuer, and returns the issuer's signed token response.
const tokenResponseBytes = await sendToAttester(tokenRequest.serialize());
// Deserialize and unblind to recover the finalized token.
const tokenResponse = client.deserializeTokenResponse(tokenResponseBytes);
const token = await client.finalize(tokenResponse);Klient poté token uplatní tak, že ho odešle Origin v Authorization hlavičku. Origin (nebo Cloudflare na hraně, viz Modely nasazení) ověří podpis podle veřejného klíče vydavatele a odpoví 200 OK.
3. Ověření funkčnosti
Že vydání a uplatnění tokenu funguje od začátku do konce, potvrzují dva signály:
- Adresářový endpoint vrací issuerovy
token-keys. - Uplatněný token se ověří podle veřejného klíče vydavatele a Origin vrátí
200 OK.
Dostupnost adresářového endpointu můžete ověřit pomocí demo nástroj Privacy Pass ↗ k načtení adresáře vydavatele.
Související zdroje
- Protokol Privacy Pass čtyři role, tok vydávání a uplatnění tokenu a zaslepené podpisy, které tokeny vytvářejí.
- Modely nasazení kdo provozuje jednotlivé role a jaké jsou modely nasazení.
- cloudflare/privacypass-attester ↗ referenční implementace Attesteru (atestace pomocí Turnstile, přeposílá požadavky na token vydavateli).
- cloudflare/privacypass-issuer ↗ referenční implementace vydavatele (Workers, rotace klíčů).