Utilizzo di cookie firmati - Amazon CloudFront

Utilizzo di cookie firmati

I cookie firmati di CloudFront ti consentono di controllare chi può accedere al contenuto quando non desideri modificare i tuoi URL correnti o per fornire accesso a più file con restrizioni, ad esempio, tutti i file nell'area abbonati di un sito Web. Questo argomento descrive le considerazioni relative all'utilizzo di cookie firmati e come definire cookie firmati utilizzando policy predefinite e personalizzate.

Scelta tra policy predefinite e policy personalizzate per cookie firmati

Quando crei un cookie firmato, scrivi una dichiarazione di policy in formato JSON che specifica le restrizioni sul cookie firmato, ad esempio, il periodo di validità del cookie. Puoi utilizzare policy predefinite o policy personalizzate. La seguente tabella confronta questi due tipi di policy:

Descrizione Policy predefinita Policy personalizzata

Puoi riutilizzare la dichiarazione di policy per più file. Per riutilizzare la dichiarazione di policy, devi utilizzare caratteri jolly nell'oggetto Resource. Per ulteriori informazioni, consulta Valori da specificare in una dichiarazione di policy per cookie firmati che utilizzano una policy personalizzata.)

No

Puoi specificare la data e l'ora in cui gli utenti possono iniziare ad accedere al tuo contenuto.

No

Sì (facoltativo)

Puoi specificare la data e l'ora in cui gli utenti non possono più accedere al tuo contenuto.

Puoi specificare l'indirizzo IP o l'intervallo di indirizzi IP degli utenti che possono accedere al tuo contenuto

No

Sì (facoltativo)

Per informazioni sulla creazione di cookie firmati utilizzando una policy predefinita, consulta Definizione di cookie firmati mediante una policy predefinita.

Per informazioni sulla creazione di cookie firmati utilizzando una policy personalizzata, consulta Impostazione di cookie firmati che utilizzano una policy personalizzata.

Funzionamento di cookie firmati

Di seguito viene fornita una panoramica su come configurare CloudFront per cookie firmati e su come CloudFront risponde quando un utente invia una richiesta che contiene un cookie firmato.

  1. Nella distribuzione CloudFront specifica uno o più gruppi di chiavi attendibili che contengono le chiavi pubbliche che possono essere utilizzate da CloudFront per verificare la firma URL. Puoi utilizzare le chiavi private corrispondenti per firmare gli URL.

    Per ulteriori informazioni, consulta Specifica dei firmatari che possono creare URL firmati e cookie firmati.

  2. Sviluppa la tua applicazione per determinare se un utente deve avere accesso al tuo contenuto e, in caso affermativo, per inviare tre intestazioni Set-Cookie al visualizzatore (Ogni intestazione Set-Cookie può contenere solo una coppia nome-valore e un cookie CloudFront firmato richiede tre coppie nome-valore). Devi inviare le intestazioni Set-Cookie al visualizzatore prima che il visualizzatore richieda il tuo contenuto privato. Se hai impostato un breve periodo di scadenza sul cookie, è possibile che tu intenda inviare tre ulteriori intestazioni Set-Cookie in risposta a richieste successive, in modo che l'utente continui ad avere accesso.

    In genere, la tua distribuzione CloudFront ha almeno due comportamenti cache e uno solo richiede l'autenticazione. La pagina di errore della parte protetta del sito include un redirector o un collegamento a una pagina di login.

    Se configuri la tua distribuzione per memorizzare nella cache file basati su cookie, CloudFront non memorizza nella cache file distinti in base agli attributi nei cookie firmati.

  3. Un utente accede al tuo sito Web e paga per il contenuto o soddisfa alcuni altri requisiti per l'accesso.

  4. La tua applicazione restituisce le intestazioni Set-Cookie nella risposta e il visualizzatore archivia la coppia nome-valore.

  5. L'utente richiede un file.

    Il browser dell'utente o un altro visualizzatore ottiene le coppie nome-valore della fase 4 e le aggiunge alla richiesta in un'intestazione Cookie. Questo è il cookie firmato.

  6. CloudFront utilizza la chiave pubblica per convalidare la firma nel cookie firmato e per confermare che il cookie non è stato alterato. Se la firma non è valida, la richiesta viene respinta.

    Se la firma nel cookie è valida, CloudFront esamina la dichiarazione di policy nel cookie (o ne crea uno se stai utilizzando una policy predefinita) per confermare che la richiesta è ancora valida. Ad esempio, se hai specificato una data e un'ora di inizio e di fine per il cookie, CloudFront conferma che l'utente sta cercando di accedere al tuo contenuto durante il periodo di tempo in cui autorizzi l'accesso.

    Se la richiesta soddisfa i requisiti nella dichiarazione di policy, CloudFront fornisce il contenuto come nello stesso modo in cui serve contenuto senza restrizioni: determina se il file è già nella cache edge, inoltra la richiesta all'origine, se necessario, e restituisce il file all'utente.

Se specifichi il parametro Domain in un'intestazione Set-Cookie, specifica il valore più preciso possibile per ridurre l'accesso potenziale da parte di un utente con lo stesso nome di dominio radice. Ad esempio, ape.example.com è preferibile a example.com, soprattutto quando non controlli example.com. In questo modo, impedisci agli utenti di accedere al tuo contenuto a partire da www.example.com.

Per impedire questo tipo di attacco, procedi come segue:

  • Escludi gli attributi di cookie Expires e Max-Age, in modo che l'intestazione Set-Cookie crei un cookie di sessione. I cookie di sessione vengono eliminati automaticamente quando l'utente chiude il browser, cosa che riduce la possibilità che qualcuno ottenga accesso non autorizzato al tuo contenuto.

  • Includi l'attributo Secure, in modo che il cookie sia crittografato quando un visualizzatore lo include in una richiesta.

  • Quando possibile, utilizza una policy personalizzata e includi l'indirizzo IP del visualizzatore.

  • Nell'attributo CloudFront-Expires, specifica la scadenza ragionevole più corta basata sul periodo di tempo durante il quale intendi autorizzare gli utenti ad accedere al tuo contenuto.

Per determinare se un cookie firmato è ancora valido, CloudFront verifica la data e l'ora di scadenza nel cookie al momento della richiesta HTTP. Se un client inizia a scaricare un file di grandi dimensioni immediatamente prima della scadenza, il download viene completato anche se la scadenza avviene durante il download. Se la connessione TCP viene interrotta e il client tenta di riavviare il download dopo la scadenza, il download non riesce.

Se un client utilizza Range GET per ottenere un file in parti più piccole, qualsiasi richiesta GET che si verifica dopo la scadenza non riuscirà. Per ulteriori informazioni sulle richieste Range GET, consulta Informazioni su come CloudFront elabora le richieste parziali per un oggetto (Range GET)..

Codice di esempio e strumenti di terza parte.

Il codice di esempio per contenuto privato mostra solo come creare la firma per URL firmati. Tuttavia, il processo per la creazione di una firma per un cookie firmato è molto simile, di conseguenza una gran parte del codice di esempio è ancora rilevante. Per ulteriori informazioni, consulta gli argomenti seguenti: