secretary/核心

PHP 的秘密管理器

3.0.4 2024-01-29 15:41 UTC

README

Latest Stable Version Total Downloads

秘密是大多数可构建的应用程序的一个重要方面。如何存储它们,并保持它们“秘密”是一个挑战。幸运的是,有一些工具可以帮助您保持它们的安全。

Secretary 是一个将您的 PHP 应用程序与这些工具集成的工具。

目录

  1. 安装
  2. API 文档
    1. Secretary\Manager
      1. 初始化
      2. getSecret
      3. putSecret
      4. deleteSecret
      5. getAdapter
    2. Secretary\Secret
      1. getKey
      2. getValue

安装

$ composer req secretary/core
选择您需要的版本

本身,核心是无用的。您还需要至少添加一个适配器

还有一些附加到 Secretary 的其他杂项包

API 文档

在 Secretary 中,您将与两个类交互

Secretary\Manager

Secretary\Manager->__construct(AdapterInterface $adapter)

传递您希望使用的适配器。

<?php
use Secretary\Manager;
use Secretary\Adapter\AWS\SecretsManager\LocalJSONFileAdapter;

$manager = new Manager(
    new LocalJSONFileAdapter([
        'region'      => 'us-east-1',
        'credentials' => [
            'accessKeyId'     => 'myAccessKeyId',
            'secretAccessKey' => 'mySecretAccessKey'
        ]
    ])
);

可选地,您可以使用其中一个缓存适配器来包装您的适配器。

<?php
use Secretary\Manager;
use Secretary\Adapter\AWS\SecretsManager\LocalJSONFileAdapter;

use Secretary\Adapter\Cache\PSR6Cache\ChainAdapter;
use Cache\Adapter\Apc\ApcCachePool;

$manager = new Manager(
    new ChainAdapter(
        new LocalJSONFileAdapter([
            'region'      => 'us-east-1',
            'credentials' => [
                'accessKeyId'     => 'myAccessKeyId',
                'secretAccessKey' => 'mySecretAccessKey'
            ]
        ]),
        new ApcCachePool()
    )
);

有关适配器的参数和选项的更多信息,请参阅相应的文档。

Secretary\Manager->getSecret(string $key, ?array $options): Secret

从配置的适配器中检索秘密。 $key 是您试图获取的秘密(或路径)的名称。

某些适配器还将接受自定义选项,例如 AWS SecretsManager 适配器的 VersionId 和 VersionStage。

如果秘密找不到,将抛出 Secretary\SecretNotFoundException

$secret = $manager->getSecret('databases/redis/dsn');
/*
Secret {
    "path" = "databases/redis/dsn",
    "value" = "redis://:6379"
}
*/

某些适配器还支持将键/值映射作为秘密的值存储。

$secret = $manager->getSecret('databases/redis');
/*
Secret {
    "path" = "databases/redis",
    "value" = [
        "dsn" => "redis://:6379",
        "password" => "my_super_strong_password" 
    ]
}
*/

Secretary\Manager->putSecret(string $key, string|array $value, ?array $options): void

将具有给定 $value 的秘密放入存储引擎中,其键为 $key

如果当前适配器不支持数组,并且您传递了一个数组,它将抛出 Secretary\ValueNotSupportedException

同样,某些适配器允许传递自定义选项,并将其与请求一起发送。

$manager->putSecret('database/redis', 'postgres://:5432');

对于支持键/值映射作为值的适配器

$manager->putSecret('database/redis', ['dsn' => 'redis://:6379', 'password' => 'my_super_strong_password']);

Secretary\Manager->deleteSecret(string $key, ?array $options): void

使用给定的 $key 从存储引擎中删除一个秘密。

同样,某些适配器允许传递自定义选项,并将其与请求一起发送。

$manager->deleteSecret('database/redis');

Secretary\Manager->getAdapter(): AdapterInterface

将返回在构造过程中传递给此管理器的适配器。

Secretary\Secret

此类实现了 ArrayAccess 接口,因此如果您的秘密支持传递键/值映射,您可以直接从映射中获取

秘密是不可变的,因此尝试更改值将抛出异常。

$secret = $manager->getSecret('database/redis');

$dsn = $secret['dsn'];

Secretary\Secret->getKey(): string

返回秘密的键

$secret = $manager->getSecret('dabase/redis');

$secret->getKey() === 'database/redis'; // true

Secretary\Secret->getValue(): string | array

返回秘密的值。如果秘密是键/值映射,它是一个数组

$secret = $manager->getSecret('dabase/redis/dsn');

$secret->getValue() === 'redis://:6379'; // true

// Or

$secret = $manager->getSecret('dabase/redis');

print_r($secret->getValue()); 
/*
[
    "dsn" => "redis://:6379",
    "password" => "my_super_strong_password" 
]
*/