lab66/laravel-url-signer

Laravel中的自定义签名URL

3.0.1 2017-10-05 10:33 UTC

This package is not auto-updated.

Last update: 2024-09-25 03:29:44 UTC


README

Latest Version on Packagist Build Status Quality Score SensioLabsInsight StyleCI Total Downloads

本包可以创建有限生命周期的URL。这是通过向URL添加过期日期和签名来完成的。

需要Laravel 5.3及以上版本。

以下是如何创建有效期为30分钟的签名URL的示例

UrlSigner::sign('https://myapp.com/protected-route', 30);

输出将如下所示

https://app.com/protected-route?expires=xxxxxx&signature=xxxxxx

可以通过validate-函数验证URL。

UrlSigner::validate('https://app.com/protected-route?expires=xxxxxx&signature=xxxxxx');

该包还提供了一个中间件来保护路由

安装

如您所料,该包可以通过Composer安装

composer require lab66/laravel-url-signer

要启用该包,请注册服务提供者,并可选地注册外观

// config/app.php

'providers' => [
    ...
    Lab66\UrlSigner\UrlSignerServiceProvider::class,
];

'aliases' => [
    ...
    'UrlSigner' => Lab66\UrlSigner\UrlSignerFacade::class,
];

配置

配置文件可以可选地通过以下方式发布

php artisan vendor:publish --tag=url-signer

这是文件的内容

return [

    /*
     * The private key used to create the signature & sign the url.
     */
    'private_key' => '-----BEGIN RSA PRIVATE KEY-----
MIIBOwIBAAJBAMLEGGPuPfopS53++75op5KaiDba4Lkcl7qjjTA8+W1Y1qzGGM2Z
2zwJ8Uk5alBu47fY63vUClVnGK0ieXviiEkCAwEAAQJAYXJnmagbzkxXDygCoNQP
86Ppvzhn83ZA3Br0i0wWqARJfHWnjiXgfJ+JOIOIngeGKGyd2Y9+6LhT+Ma79ByE
2QIhAOKwTPSCrVQrGj1shT87OuhAuXp5V3YmDGRqx+fVXoELAiEA2/MceDDmIuUn
LqOAfbPgbXOife/pFJjaGPrVcxIUmHsCIQCiyADqz+/RcgYst4HTjx/U6a2HMh1J
HTdm4HrekoyDUwIgCKYRm4RIuFyMYuAZAFhfXc5rOEqDvsSX5t2OIR035BsCIQCd
lf7pXxewNU9ky5sxHuKM4lWSy0BoDHrbyEw/Pigksg==
-----END RSA PRIVATE KEY-----',

    /**
     * The public key used to verify the signed url signature.
     */
    'public_key' => '-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMLEGGPuPfopS53++75op5KaiDba4Lkc
l7qjjTA8+W1Y1qzGGM2Z2zwJ8Uk5alBu47fY63vUClVnGK0ieXviiEkCAwEAAQ==
-----END PUBLIC KEY-----',

    /*
     * The default expiration time of a URL in minutes.
     */
    'default_expiration' => 60,

    /*
     * These strings are used a parameter names in a signed url.
     */
    'parameters' => [
        'expires'   => 'expires',
        'signature' => 'signature',
    ],

];

使用方法

签名URL

可以使用sign-方法对URL进行签名

UrlSigner::sign('https://myapp.com/protected-route');

默认情况下,URL的生命周期为1小时。此值可以在配置文件中更改。如果您需要自定义生命周期,可以指定URL应有效的分钟数

//the generated URL will be valid for 5 minutes.
UrlSigner::sign('https://myapp.com/protected-route', 5);

为了更精细的控制,您还可以将DateTime实例作为第二个参数传递。URL将在那一刻之前有效。此示例使用Carbon进行便利

//This URL will be valid up until 2 days from the moment it was generated.
UrlSigner::sign('https://myapp.com/protected-route', Carbon::now()->addDays(2) );

验证URL

要验证签名URL,只需调用validate()-方法。这将返回一个布尔值。

UrlSigner::validate('https://app.com/protected-route?expires=xxxxxx&signature=xxxxxx');

使用中间件保护路由

该包还提供了一个用于保护路由的中间件

Route::get('protected-route', ['middleware' => 'signed-url', function () {
    return 'Hello secret world!';
}]);

如果调用没有有效签名的路由,您的应用程序将终止并返回403状态码。

重新生成密钥

本包还公开了用于在配置中重新生成密钥的函数,这可能在每次部署后进行,这将使所有旧的签名URL无效。

php artisan url-signer:generate

在运行此命令之前,您需要发布配置文件。

还有一个可选参数用于密钥的复杂性,根据复杂性,这可能会影响签名/验证的速度。

php artisan url-signer:generate 4096

更新日志

有关最近更改的详细信息,请参阅更新日志

测试

$ vendor/bin/phpunit

Laravel之外的用法

如果您正在处理非Laravel项目,可以使用Spatie提供的无框架版本

贡献

有关详细信息,请参阅贡献指南

安全性

如果您发现任何安全问题,请通过电子邮件hello@lab66.com或通过问题跟踪器联系。

鸣谢

关于

本项目源自https://github.com/spatie/laravel-url-signer,但已被重写为一个包含所有功能的包,并支持OpenSSL的公私钥。

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件