

# Usar cookies assinados
<a name="private-content-signed-cookies"></a>

Os signed cookies do CloudFront permitem controlar quem pode acessar seu conteúdo quando você não quiser alterar seus URLs atuais ou quando quiser fornecer acesso a vários arquivos restritos, por exemplo, todos os arquivos da área de assinantes de um site. Este tópico explica as considerações ao usar signed cookies e descreve como defini-los usando políticas padrão e personalizadas.

**Topics**
+ [Decidir usar políticas predefinidas ou personalizadas para cookies assinados](#private-content-choosing-canned-custom-cookies)
+ [Como signed cookies funcionam](#private-content-how-signed-cookies-work)
+ [Evitar o uso indevido de cookies assinados](#private-content-signed-cookie-misuse)
+ [Quando o CloudFront confere a data e hora de validade de um cookie assinado](#private-content-check-expiration-cookie)
+ [Código de exemplo e ferramentas de terceiros](#private-content-overview-sample-code-cookies)
+ [Definir cookies assinados usando uma política predefinida](private-content-setting-signed-cookie-canned-policy.md)
+ [Definir cookies assinados usando uma política personalizada](private-content-setting-signed-cookie-custom-policy.md)
+ [Criar cookies assinados usando PHP](signed-cookies-PHP.md)

## Decidir usar políticas predefinidas ou personalizadas para cookies assinados
<a name="private-content-choosing-canned-custom-cookies"></a>

Ao criar um signed cookie, você grava uma declaração de política no formato JSON que especifica as restrições no signed cookie, por exemplo, por quanto tempo o cookie é válido. Você pode usar políticas padrão ou personalizadas. A tabela a seguir compara as políticas personalizadas e padrão:


****  

| Descrição | Política padrão | Política personalizada | 
| --- | --- | --- | 
| Você pode reutilizar a declaração de política para vários arquivos. Para reutilizar a declaração de política, é necessário usar caracteres curinga no objeto `Resource`. Para obter mais informações, consulte [Valores especificados na declaração de uma política personalizada para signed cookies](private-content-setting-signed-cookie-custom-policy.md#private-content-custom-policy-statement-cookies-values).)  | Não | Sim | 
| Você pode especificar a data e a hora em que os usuários podem começar a acessar seu conteúdo | Não | Sim (opcional) | 
| Você pode especificar a data e a hora em que os usuários não podem mais acessar seu conteúdo | Sim | Sim | 
| Você pode especificar o endereço IP ou vários endereços IP dos usuários que podem acessar seu conteúdo | Não | Sim (opcional) | 

Para obter informações sobre como criar signed cookies usando uma política padrão, consulte [Definir cookies assinados usando uma política predefinida](private-content-setting-signed-cookie-canned-policy.md).

Para obter informações sobre como criar signed cookies usando uma política personalizada, consulte [Definir cookies assinados usando uma política personalizada](private-content-setting-signed-cookie-custom-policy.md).

## Como signed cookies funcionam
<a name="private-content-how-signed-cookies-work"></a>

A seguir, uma visão geral de como configurar o CloudFront para signed cookies e como o CloudFront responde quando um usuário envia uma solicitação que contenha um signed cookie. 

1. Na sua distribuição do CloudFront, especifique um ou mais grupos de chaves confiáveis, que contenham as chaves públicas que o CloudFront pode usar para verificar a assinatura do URL. Use as chaves privadas correspondentes para assinar os URLs.

   Para obter mais informações, consulte [Especificar os assinantes que podem criar URLs e cookies assinados](private-content-trusted-signers.md).

1. Desenvolva seu aplicativo para determinar se um usuário deve ter acesso a seu conteúdo e, em caso afirmativo, para enviar três cabeçalhos `Set-Cookie` para o visualizador. (Cada cabeçalho `Set-Cookie` pode conter somente um par de nome/valor, e um signed cookie do CloudFront requer três pares de nome/valor.) Você deve enviar os cabeçalhos `Set-Cookie` para o visualizador antes de ele solicitar o conteúdo privado. Se você definir uma hora de expiração breve no cookie, envie mais três cabeçalhos `Set-Cookie` em resposta a solicitações subsequentes para que o usuário continue tendo acesso.

   Normalmente, a distribuição do CloudFront terá pelo menos dois comportamentos de cache: um que não exige autenticação e um que exige. A página de erro da parte segura do site inclui um redirecionador ou link para uma página de login.

   Se você configurar sua distribuição para armazenar arquivos em cache com base em cookies, o CloudFront não armazenará arquivos separados com base nos atributos nos signed cookies.

1. Um usuário faz login em seu site e paga pelo conteúdo ou cumpre outro requisito de acessar.

1. O aplicativo retorna os cabeçalhos `Set-Cookie` na resposta, e o visualizador armazena os pares de nome-valor.

1. O usuário solicita um arquivo.

   O navegador do usuário ou outro visualizador obtém os pares de nome-valor da etapa 4 e os adiciona à solicitação em um cabeçalho `Cookie`. Esse é o signed cookie.

1. O CloudFront usa a chave pública para validar a assinatura no signed cookie e confirmar se o cookie não foi adulterado. Se a assinatura for inválida, a solicitação será rejeitada.

   Se a assinatura do cookie for válida, o CloudFront analisará a declaração de política no cookie (ou criará uma se você estiver usando uma política padrão) para confirmar se a solicitação continua válida. Por exemplo, se você especificou uma data e hora de início e término para o cookie, o CloudFront confirmará se o usuário está tentando acessar o conteúdo durante o período de acesso permitido.

   Se a solicitação cumprir os requisitos da declaração de política, o CloudFront fornecerá o conteúdo, como o faz com conteúdo não restrito: determina se o arquivo já está no ponto de presença de caches, encaminha a solicitação para a origem, se necessário, e retorna o arquivo para o usuário.

## Evitar o uso indevido de cookies assinados
<a name="private-content-signed-cookie-misuse"></a>

Se você especificar o parâmetro `Domain` em um cabeçalho `Set-Cookie`, especifique o valor mais preciso possível para reduzir o possível acesso por alguém com o mesmo nome de domínio raiz. Por exemplo, app.example.com é preferível a example.com, especialmente quando você não tem o controle sobre example.com. Isso ajuda a evitar que alguém acesse seu conteúdo de www.example.com.

Para ajudar a evitar esse tipo de ataque:
+ Exclua os atributos de cookie `Expires` e `Max-Age` para que o cabeçalho `Set-Cookie` crie um cookie de sessão. Cookies de sessão são automaticamente excluídos quando o usuário fecha o navegador, diminuindo a possibilidade de alguém obter acesso não autorizado ao seu conteúdo.
+ Inclua o atributo `Secure` para que o cookie seja criptografado quando o visualizador incluí-lo em uma solicitação.
+ Quando possível, use uma política personalizada e inclua o endereço IP do visualizador.
+ No atributo `CloudFront-Expires`, especifique o menor tempo de expiração razoável com base em quanto tempo você deseja que os usuários tenham acesso a seu conteúdo.

## Quando o CloudFront confere a data e hora de validade de um cookie assinado
<a name="private-content-check-expiration-cookie"></a>

Para determinar se um signed cookie continua válido, o CloudFront verifica a data e hora de expiração dele no momento da solicitação HTTP. Se um cliente começar a fazer download de um grande arquivo logo antes da hora de expiração, o download será concluído mesmo se passar a hora de expiração durante o download. Se a conexão TCP cair e o cliente tentar reiniciar o download após a hora de expiração, ocorrerá falha no download.

Se o cliente usar Range GETs para obter um arquivo em partes menores, ocorrerá falha em qualquer solicitação GET que ocorrer após a hora de expiração. Para obter mais informações sobre Range GETs, consulte [Como o CloudFront processa solicitações parciais de um objeto (Range GETs)](RangeGETs.md).

## Código de exemplo e ferramentas de terceiros
<a name="private-content-overview-sample-code-cookies"></a>

O código de exemplo do conteúdo privado mostra apenas como criar a assinatura para signed URLs. No entanto, o processo de criação de uma assinatura para um signed cookie é semelhante, ou seja, a maior parte do código de exemplo é relevante. Para saber mais, consulte os seguintes tópicos: 
+ [Criar uma assinatura de URL usando Perl](CreateURLPerl.md)
+ [Criar uma assinatura de URL usando PHP](CreateURL_PHP.md)
+ [Criar uma assinatura de URL usando C\$1 e o .NET Framework](CreateSignatureInCSharp.md)
+ [Criar uma assinatura de URL usando Java](CFPrivateDistJavaDevelopment.md)