haridarshan / laravel-url-signer-cloudfront
官方 AWS PHP SDK 的包装器,用于生成 CloudFront 签名 URL
v1.0.0-alpha
2023-03-22 13:29 UTC
Requires
- php: >=7.4
- aws/aws-sdk-php-laravel: ^3.0
- illuminate/config: ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0
- illuminate/support: ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0
- vlucas/phpdotenv: ^3.3 || ^4.0 || ^5.0 || ^5.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.4
- phpunit/phpunit: ^9.5 || ^10.0
- vimeo/psalm: ^5.0
This package is auto-updated.
Last update: 2024-09-10 09:02:36 UTC
README
这是一个简单的官方 AWS PHP Laravel SDK 包装器,用于生成 CloudFront 签名 URL
安装
该包可以通过 Composer 进行安装
composer require haridarshan/laravel-url-signer-cloudfront
配置
使用 Laravel
默认情况下,该包使用以下环境变量来自动配置插件,无需修改
AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_REGION
要自定义配置文件,请使用 Artisan 发布包配置。
php artisan vendor:publish --provider="Haridarshan\Laravel\UrlSigner\AwsCloudFront\CloudFrontServiceProvider"
设置可以在生成的 config/aws.php
和 config/cloudfront.php
配置文件中找到。默认情况下,凭证和区域设置将从您的 .env
文件中获取。
config/aws.php(由 Aws\Laravel\AwsServiceProvider 发布)
return [ 'credentials' => [ 'key' => env('AWS_ACCESS_KEY_ID', ''), 'secret' => env('AWS_SECRET_ACCESS_KEY', ''), ], 'region' => env('AWS_REGION', 'us-east-1'), 'version' => 'latest', // You can override settings for specific services 'Ses' => [ 'region' => 'us-east-1', ], ];
config/cloudfront.php
return [ 'default_expiration_time_in_seconds' => 60 * 60 * 24, 'private_key_path' => get_base_path(env('CLOUDFRONT_PRIVATE_KEY_PATH', '')), 'key_pair_id' => env('CLOUDFRONT_KEY_PAIR_ID', ''), ];
请注意:在
.env
文件中添加CLOUDFRONT_PRIVATE_KEY_PATH
和CLOUDFRONT_KEY_PAIR_ID
用法
为私有分发签名 CloudFront URL
使用默认配置
$url = config('filesystems.disks.s3.url') . '/example.mp4'; // Signed CloudFront URL with 1 day expiry echo \Haridarshan\Laravel\UrlSigner\AwsCloudFront\Facades\CloudFrontFacade::signedUrl($url);
使用自定义过期时间
$url = config('filesystems.disks.s3.url') . '/example.mp4'; $expiry = 60 * 60; // Optional in seconds (Default: 1 day) // Signed CloudFront URL with 1 hour expiry echo \Haridarshan\Laravel\UrlSigner\AwsCloudFront\Facades\CloudFrontFacade::signedUrl( $url, $expiry );
使用自定义策略创建 CloudFront URL
$url = config('filesystems.disks.s3.url') . '/example.mp4'; $policy = <<<POLICY { "Statement": [ { "Resource": "{$url}", "Condition": { "IpAddress": {"AWS:SourceIp": "{$_SERVER['REMOTE_ADDR']}/32"}, "DateLessThan": {"AWS:EpochTime": 3600} } } ] } POLICY; // Signed CloudFront URL with custom policy echo \Haridarshan\Laravel\UrlSigner\AwsCloudFront\Facades\CloudFrontFacade::signedUrl( $url, null, $policy );
为私有分发签名 CloudFront cookie
使用默认配置
$url = config('filesystems.disks.s3.url') . '/example.mp4'; // CloudFront Signed Cookies with 1 day expiry result = \Haridarshan\Laravel\UrlSigner\AwsCloudFront\Facades\CloudFrontFacade::signedCookie($url); /* If successful, returns something like: CloudFront-Expires = 1589926678 CloudFront-Signature = Lv1DyC2q...2HPXaQ__ CloudFront-Key-Pair-Id = AAPKAJIKZATYYYEXAMPLE */ foreach($result as $key => $value) { echo $key . ' = ' . $value . "\n"; }
使用自定义策略创建 CloudFront cookie
$url = config('filesystems.disks.s3.url') . '/example.mp4'; $policy = <<<POLICY { "Statement": [ { "Resource": "{$url}", "Condition": { "IpAddress": {"AWS:SourceIp": "{$_SERVER['REMOTE_ADDR']}/32"}, "DateLessThan": {"AWS:EpochTime": 3600} } } ] } POLICY; // CloudFront Signed Cookies with custom policy $result = \Haridarshan\Laravel\UrlSigner\AwsCloudFront\Facades\CloudFrontFacade::signedUrl( null, null, $policy );
在 Laravel 应用程序外部
require_once "vendor/autoload.php"; $url = "https://example.cloudfront.net/test.mp4"; Dotenv::create( Env::getRepository(), get_base_path(), '.env' )->safeLoad(); $cloudfront = new \Haridarshan\Laravel\UrlSigner\AwsCloudFront\CloudFront( (new Sdk([ 'credentials' => [ 'key' => env('AWS_ACCESS_KEY_ID', ''), 'secret' => env('AWS_SECRET_ACCESS_KEY', ''), ], 'region' => env('AWS_REGION', ''), 'version' => 'latest', ]))->createClient('cloudfront'), [ 'key_pair_id' => env('CLOUDFRONT_KEY_PAIR_ID', ''), 'private_key_path' => env('CLOUDFRONT_PRIVATE_KEY_PATH', '') ] ); $signedUrl = $cloudfront->signedUrl($url);