Как хранить токены и пароли, которые необходимы для работы приложения?

413
28 октября 2017, 17:58

Приветствую. Мне в приложении, например, нужно обращаться к базе, а значит нужно как-то получать и хранить логин, пароль для базы; нужно обращаться к API vk и для этого хранить токены. Также приложение должно иметь возможность менять эти токены/пароли. Написать эти пароли прямо в коде - тоже не лучший вариант.

Как это правильно сделать с точки зрения архитектуры? Конечно, можно просто хранить всё в каком-нибудь json файле, но корректно ли так делать? Может стоит написать статический класс AccountsManager, который будет всеми этими делами управлять?

Answer 1

Храни данные от базы в .php файле и подключай его через include.

return [
    'host' => 'localhost',
    'schema' => 'db_name',
    #Дальше сам
];

В бд храни данные от акков: Логин, пароль, текущий токен.

Answer 2

Есть много вариантов (xml, json, txt файлы), и по сути каждый не плох, предложу вариант, который больше всего мне симпатичен, пишется класс для хранения настроек:

class Config
{
    static private $params = [];
    public static function get($key)
    {
        return isset(self::$params[$key]) ? self::$params[$key] : false;
    }
    public static function set($key,$value)
    {
        self::$params[$key] = $value;
    }

    public function __get($key)
    {
        return isset(self::$params[$key]) ? self::$params[$key] : false;
    }
    public function __isset($key)
    {
        return isset(self::$params[$key]);
    }
}

Использование:

Config::set("db_host", "localhost");
Config::set("db_port", 5432);
Config::get("db_host");

кстати, можно данный класс привязать к файлу

Answer 3

Для таких вещей существует DotEnv. Все ключи хранятся в ini-подобном файле .env в корневой папке проекта. Но чтобы в git не загружали секретные данные, в ту же папку можно положить .env.example, в котором будет шаблон настроек, который нужно переименовать или скопировать в .env. Доступ к ключам будет через getenv функцию. // Очень удобно, сам пользуюсь подобным подходом

Можно еще более заморочиться, если вы крупная компания. Продукт, называемый Vault от HashiCorp призванный централизованно хранить ключи и токены. Сам пока что не использовал, но выглядит интересно.

ВАЖНО!

Секретные ключи никогда не должны быть доступны другим. Поэтому вшивать их в код, заливать в систему контроля версий и п.р. категорически не рекомендуется. Настройки должны лежать там, где используются, а именно на сервере.

READ ALSO
Граница слова preg_replace

Граница слова preg_replace

Не понимаю, почему находит простое слово, если я указал границу?

212
Как применить двойную сортировку?

Как применить двойную сортировку?

Имею проблему с сортировкой в таблицеЕсть стандартное строение листа(таблицы):

221
Вопрос по работе с свойствами класса

Вопрос по работе с свойствами класса

Здравствуйте, хочу реализовать одну вещь, суть ее в следующем: Есть класс А, в нем метод method и свойство atribute и файл, например indexphp

211
Почему JIRA REST API не пускает LDAP пользователей?

Почему JIRA REST API не пускает LDAP пользователей?

Через JIRA REST API создаю инциденты с корпоративного сайтаС логином админа и агентов все работает, а с остальными пользователями (тянутся из LDAP) проблема

228