乐闻世界logo
搜索文章和话题

How to use CloudFront signed cookies in the browser?

4 个月前提问
4 个月前修改
浏览次数17

1个答案

1

在使用 Amazon CloudFront 分发内容时,您可以使用签名的 Cookie 来控制谁可以访问您的内容。这种方法比使用签名的 URL 提供了更高的灵活性,尤其是当您希望控制对多个文件的访问时。下面我会详细说明如何在浏览器中使用 CloudFront 签名的 Cookie。

步骤 1: 创建一个 CloudFront 分发

首先,您需要有一个 CloudFront 分发。创建分发时,选择您的原始服务器,它可以是 Amazon S3 存储桶或者任何 HTTP 服务器。

步骤 2: 启用私有内容并生成密钥对

在 AWS 管理控制台中启用 CloudFront 分发的“私有内容”选项,并创建一个新的公钥和私钥对。将公钥上传至 AWS CloudFront 控制台,并记录下私钥,因为这将用于生成签名。

在 CloudFront 分发设置中,您需要配置一个或多个缓存行为,并将其关联到您希望保护的内容。在缓存行为的设置中,选中“使用签名的 URL 和 Cookie”。

签名 Cookie 的生成需要使用您的私钥。您可以使用 AWS SDK 或者自定义脚本来创建这些 Cookie。以下是使用 Python 和 boto3 库生成签名 Cookie 的一个例子:

python
import boto3 from botocore.signers import CloudFrontSigner import rsa import datetime def rsa_signer(message): with open('path/to/your/private/key.pem', 'rb') as key_file: private_key = rsa.PrivateKey.load_pkcs1(key_file.read()) return rsa.sign(message, private_key, 'SHA-1') key_id = 'YOUR_KEY_PAIR_ID' url = 'https://yourdistribution.cloudfront.net/yourcontent' date_less_than = datetime.datetime(2023, 1, 1) cookies = CloudFrontSigner(key_id, rsa_signer).generate_cookies( url, date_less_than=date_less_than, ip_address='192.0.2.0/24' # Optional: For restricting access to specific IP range ) print(cookies)

生成 Cookie 后,需要在用户的浏览器上设置这些 Cookie。这可以通过在响应中设置 Set-Cookie 头部来实现,或者使用 JavaScript 在客户端设置。

javascript
document.cookie = "CloudFront-Policy=" + encodeURIComponent(cookies['CloudFront-Policy']); document.cookie = "CloudFront-Signature=" + encodeURIComponent(cookies['CloudFront-Signature']); document.cookie = "CloudFront-Key-Pair-Id=" + encodeURIComponent(cookies['CloudFront-Key-Pair-Id']);

步骤 6: 测试和验证

测试设置好的 Cookie 是否工作正常。访问您的 CloudFront URL,查看内容是否可以正常访问。如果配置正确,和有权限的用户应该能够看到内容,而无权限的用户则不能。

通过使用签名的 Cookie,您可以有效地管理和控制用户对 CloudFront 分发内容的访问,这在管理大规模内容分发时尤为重要。

2024年8月12日 14:27 回复

你的答案