tigusigalpa / sber-id-php
Laravel package for Sber ID (SberBank OAuth) integration
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/tigusigalpa/sber-id-php
Requires
- php: ^7.4|^8.0|^8.1|^8.2|^8.3
- guzzlehttp/guzzle: ^7.0
- illuminate/http: ^8.0|^9.0|^10.0|^11.0|^12.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^6.0|^7.0|^8.0|^9.0
- phpunit/phpunit: ^9.0|^10.0
README
Laravel пакет для интеграции с Sber ID (OAuth авторизация через Сбер). Поддержка тестового и промышленного окружения.
🌐 Язык: Русский | English
Содержание
- Возможности
- Требования
- Установка
- Настройка
- Использование
- API Справочник
- Доступные скоупы
- Решение проблем
- Тестирование
- Безопасность
- Поддержка
- Лицензия
Возможности
- ✅ Полная реализация OAuth 2.0 / OpenID Connect
- ✅ Поддержка тестового и промышленного окружения
- ✅ Управление access token и refresh token
- ✅ Получение данных профиля пользователя с расширенными скоупами
- ✅ Отправка аналитических событий
- ✅ Поддержка SSL сертификатов
- ✅ Совместимость с Laravel 8-12
- ✅ Простая настройка и кастомизация
Требования
- PHP 7.4 или выше
- Laravel 8.x, 9.x, 10.x, 11.x или 12.x
- GuzzleHTTP 7.x
Установка
Шаг 1: Установка пакета
Установите пакет через Composer:
composer require tigusigalpa/sber-id-php
Шаг 2: Публикация конфигурации
Опубликуйте конфигурационный файл:
php artisan vendor:publish --tag=sberid-config
Это создаст файл config/sberid.php в вашем Laravel приложении.
Шаг 3: Регистрация приложения
Зарегистрируйте приложение на портале Sber ID для получения:
- Client ID
- Client Secret
- SSL сертификата (для production)
Шаг 4: Настройка окружения
Добавьте следующие переменные в файл .env:
# Окружение: sandbox или production SBERID_ENVIRONMENT=sandbox # Учетные данные клиента SBERID_CLIENT_ID=ваш-client-id SBERID_CLIENT_SECRET=ваш-client-secret # Redirect URI (должен совпадать с зарегистрированным в портале Sber ID) SBERID_REDIRECT_URI=https://ваш-домен.ru/auth/sberid/callback # Скоупы (список запрашиваемых данных через пробел) SBERID_SCOPES="openid name email phone" # Запрос refresh token (срок действия 30 дней) SBERID_REQUEST_REFRESH_TOKEN=true # SSL сертификат (опционально, требуется для production) SBERID_CERTIFICATE_PATH=/путь/к/сертификату.pem SBERID_CERTIFICATE_PASSWORD=пароль-сертификата # Проверка SSL (установите false только для локальной разработки) SBERID_VERIFY_SSL=true # Аналитика (обязательно в production) SBERID_SEND_ANALYTICS=true # Таймаут запроса в секундах SBERID_TIMEOUT=10
Шаг 5: Миграция базы данных (опционально)
Если вы хотите хранить данные Sber ID в таблице пользователей:
php artisan make:migration add_sberid_to_users_table
Добавьте в миграцию:
public function up() { Schema::table('users', function (Blueprint $table) { $table->string('sberid_sub')->nullable()->unique()->after('id'); $table->text('sberid_access_token')->nullable(); $table->text('sberid_refresh_token')->nullable(); $table->timestamp('sberid_token_expires_at')->nullable(); $table->timestamp('last_login_at')->nullable(); }); }
Выполните миграцию:
php artisan migrate
Настройка
Параметры окружения
| Переменная | Тип | По умолчанию | Описание |
|---|---|---|---|
SBERID_ENVIRONMENT |
string | sandbox | Окружение: 'sandbox' или 'production' |
SBERID_CLIENT_ID |
string | - | Ваш Sber ID client ID |
SBERID_CLIENT_SECRET |
string | - | Ваш Sber ID client secret |
SBERID_REDIRECT_URI |
string | - | Callback URL (должен совпадать с порталом) |
SBERID_SCOPES |
string | openid name email phone | Скоупы через пробел |
SBERID_REQUEST_REFRESH_TOKEN |
bool | true | Запрос refresh token |
SBERID_CERTIFICATE_PATH |
string | - | Путь к SSL сертификату |
SBERID_CERTIFICATE_PASSWORD |
string | - | Пароль сертификата |
SBERID_VERIFY_SSL |
bool | true | Проверка SSL сертификатов |
SBERID_SEND_ANALYTICS |
bool | true | Отправка аналитических событий |
SBERID_TIMEOUT |
int | 10 | Таймаут запроса (секунды) |
Окружения
Sandbox (Тестовое)
- Базовый URL:
https://oauth-ift.sber.ru - Используйте для разработки и тестирования
- Установите
SBERID_ENVIRONMENT=sandbox
Production (Промышленное)
- Базовый URL:
https://oauth.sber.ru - Требуется SSL сертификат
- Аналитические события обязательны
- Установите
SBERID_ENVIRONMENT=production
Использование
Базовое использование со встроенными маршрутами
Пакет предоставляет готовые маршруты:
<!-- Перенаправление на авторизацию Sber ID --> <a href="{{ route('sberid.redirect') }}">Войти через Сбер ID</a> <!-- Callback маршрут обрабатывается автоматически: /auth/sberid/callback -->
Пользовательская реализация
1. Перенаправление на Sber ID
use Tigusigalpa\SberID\Facades\SberID; public function redirectToSberID() { $state = \Illuminate\Support\Str::random(40); $nonce = \Illuminate\Support\Str::random(40); session(['sberid_state' => $state, 'sberid_nonce' => $nonce]); $authUrl = SberID::getAuthorizationUrl($state, $nonce); return redirect($authUrl); }
2. Обработка Callback
use Tigusigalpa\SberID\Facades\SberID; use Tigusigalpa\SberID\Exceptions\SberIDException; public function handleCallback(Request $request) { $code = $request->input('code'); $state = $request->input('state'); // Проверка state if ($state !== session('sberid_state')) { abort(403, 'Неверный параметр state'); } try { // Обмен кода на токены $tokenData = SberID::getAccessToken($code); $accessToken = $tokenData['access_token']; $refreshToken = $tokenData['refresh_token'] ?? null; // Получение информации о пользователе $userInfo = SberID::getUserInfo($accessToken); // Отправка аналитики (только production) SberID::confirmAuthenticationSuccess($accessToken); // Создание или обновление пользователя в БД $user = User::updateOrCreate( ['sberid_sub' => $userInfo['sub']], [ 'email' => $userInfo['email'] ?? null, 'phone' => $userInfo['phone_number'] ?? null, 'name' => $userInfo['given_name'] ?? null, 'family_name' => $userInfo['family_name'] ?? null, ] ); // Авторизация пользователя auth()->login($user); return redirect()->route('home'); } catch (SberIDException $e) { return redirect()->route('login') ->with('error', 'Ошибка авторизации: ' . $e->getMessage()); } }
3. Обновление Access Token
use Tigusigalpa\SberID\Facades\SberID; public function refreshToken($refreshToken) { try { $tokenData = SberID::refreshAccessToken($refreshToken); $newAccessToken = $tokenData['access_token']; $newRefreshToken = $tokenData['refresh_token'] ?? null; // Обновление сохраненных токенов return $newAccessToken; } catch (SberIDException $e) { // Обработка ошибки } }
Использование на чистом PHP (без Laravel)
Пакет можно использовать в любом PHP приложении без Laravel:
1. Инициализация клиента
<?php require_once 'vendor/autoload.php'; use Tigusigalpa\SberID\SberIDClient; use Tigusigalpa\SberID\Exceptions\SberIDException; // Запуск сессии для управления state session_start(); // Инициализация клиента $client = new SberIDClient([ 'environment' => 'sandbox', // или 'production' 'client_id' => 'ваш-client-id', 'client_secret' => 'ваш-client-secret', 'redirect_uri' => 'https://ваш-домен.ru/callback.php', 'scopes' => 'openid name email phone', 'request_refresh_token' => true, 'certificate_path' => null, // Путь к сертификату для production 'certificate_password' => null, 'verify_ssl' => true, 'send_analytics' => true, 'timeout' => 10, ]);
2. Перенаправление на Sber ID (login.php)
<?php require_once 'vendor/autoload.php'; require_once 'client.php'; // Файл с инициализацией клиента // Генерация state и nonce для безопасности $state = bin2hex(random_bytes(20)); $nonce = bin2hex(random_bytes(20)); // Сохранение в сессии $_SESSION['sberid_state'] = $state; $_SESSION['sberid_nonce'] = $nonce; // Получение URL авторизации $authUrl = $client->getAuthorizationUrl($state, $nonce); // Перенаправление пользователя header('Location: ' . $authUrl); exit;
3. Обработка Callback (callback.php)
<?php require_once 'vendor/autoload.php'; require_once 'client.php'; // Файл с инициализацией клиента // Получение параметров из callback $code = $_GET['code'] ?? null; $state = $_GET['state'] ?? null; $error = $_GET['error'] ?? null; // Обработка ошибки if ($error) { $errorDescription = $_GET['error_description'] ?? 'Неизвестная ошибка'; die("Ошибка авторизации: {$error} - {$errorDescription}"); } // Проверка параметра state if (!$state || $state !== $_SESSION['sberid_state']) { die('Неверный параметр state. Возможна CSRF атака.'); } // Очистка state из сессии unset($_SESSION['sberid_state'], $_SESSION['sberid_nonce']); if (!$code) { die('Код авторизации не получен'); } try { // Обмен кода на токены $tokenData = $client->getAccessToken($code); $accessToken = $tokenData['access_token']; $refreshToken = $tokenData['refresh_token'] ?? null; $idToken = $tokenData['id_token'] ?? null; // Получение информации о пользователе $userInfo = $client->getUserInfo($accessToken); // Декодирование ID токена (опционально) if ($idToken) { $idTokenData = $client->decodeIdToken($idToken); } // Отправка аналитики (только production) $client->confirmAuthenticationSuccess($accessToken); // Сохранение данных пользователя в сессии или БД $_SESSION['user'] = [ 'id' => $userInfo['sub'], 'email' => $userInfo['email'] ?? null, 'phone' => $userInfo['phone_number'] ?? null, 'name' => $userInfo['given_name'] ?? null, 'family_name' => $userInfo['family_name'] ?? null, 'middle_name' => $userInfo['middle_name'] ?? null, ]; // Сохранение токенов безопасно (шифруйте в production!) $_SESSION['access_token'] = $accessToken; $_SESSION['refresh_token'] = $refreshToken; $_SESSION['token_expires_at'] = time() + $tokenData['expires_in']; // Перенаправление на защищенную страницу header('Location: /dashboard.php'); exit; } catch (SberIDException $e) { die('Ошибка авторизации: ' . $e->getMessage() . ' (Код: ' . $e->getErrorCode() . ')'); }
4. Обновление токена (refresh.php)
<?php require_once 'vendor/autoload.php'; require_once 'client.php'; $refreshToken = $_SESSION['refresh_token'] ?? null; if (!$refreshToken) { die('Refresh token недоступен'); } try { $tokenData = $client->refreshAccessToken($refreshToken); // Обновление токенов в сессии $_SESSION['access_token'] = $tokenData['access_token']; $_SESSION['refresh_token'] = $tokenData['refresh_token'] ?? $refreshToken; $_SESSION['token_expires_at'] = time() + $tokenData['expires_in']; echo "Токен успешно обновлен!"; } catch (SberIDException $e) { // Refresh token истек или недействителен - нужна повторная авторизация unset($_SESSION['access_token'], $_SESSION['refresh_token']); header('Location: /login.php'); exit; }
5. Пример защищенной страницы (dashboard.php)
<?php session_start(); // Проверка авторизации пользователя if (!isset($_SESSION['user'])) { header('Location: /login.php'); exit; } // Проверка необходимости обновления токена if (isset($_SESSION['token_expires_at']) && time() >= $_SESSION['token_expires_at']) { // Токен истек, попытка обновления header('Location: /refresh.php'); exit; } $user = $_SESSION['user']; ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Личный кабинет</title> </head> <body> <h1>Добро пожаловать, <?= htmlspecialchars($user['name'] ?? 'Пользователь') ?>!</h1> <p>Email: <?= htmlspecialchars($user['email'] ?? 'Не указан') ?></p> <p>Телефон: <?= htmlspecialchars($user['phone'] ?? 'Не указан') ?></p> <a href="/logout.php">Выйти</a> </body> </html>
6. Полный пример с базой данных
<?php // callback.php с сохранением в БД через PDO require_once 'vendor/autoload.php'; require_once 'client.php'; // Подключение к БД $pdo = new PDO('mysql:host=localhost;dbname=myapp', 'username', 'password'); // ... код проверки state ... try { $tokenData = $client->getAccessToken($code); $userInfo = $client->getUserInfo($tokenData['access_token']); // Проверка существования пользователя $stmt = $pdo->prepare('SELECT * FROM users WHERE sberid_sub = ?'); $stmt->execute([$userInfo['sub']]); $user = $stmt->fetch(PDO::FETCH_ASSOC); if ($user) { // Обновление существующего пользователя $stmt = $pdo->prepare(' UPDATE users SET email = ?, phone = ?, sberid_access_token = ?, sberid_refresh_token = ?, sberid_token_expires_at = ?, last_login_at = NOW() WHERE sberid_sub = ? '); $stmt->execute([ $userInfo['email'] ?? null, $userInfo['phone_number'] ?? null, $tokenData['access_token'], $tokenData['refresh_token'] ?? null, date('Y-m-d H:i:s', time() + $tokenData['expires_in']), $userInfo['sub'] ]); } else { // Создание нового пользователя $stmt = $pdo->prepare(' INSERT INTO users ( sberid_sub, email, phone, name, family_name, middle_name, sberid_access_token, sberid_refresh_token, sberid_token_expires_at, created_at ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NOW()) '); $stmt->execute([ $userInfo['sub'], $userInfo['email'] ?? null, $userInfo['phone_number'] ?? null, $userInfo['given_name'] ?? null, $userInfo['family_name'] ?? null, $userInfo['middle_name'] ?? null, $tokenData['access_token'], $tokenData['refresh_token'] ?? null, date('Y-m-d H:i:s', time() + $tokenData['expires_in']) ]); } // Установка сессии $_SESSION['user_id'] = $userInfo['sub']; header('Location: /dashboard.php'); exit; } catch (SberIDException $e) { die('Ошибка: ' . $e->getMessage()); }
Кастомизация контроллера (Laravel)
Расширьте стандартный контроллер:
namespace App\Http\Controllers; use Tigusigalpa\SberID\Http\Controllers\SberIDController as BaseSberIDController; class CustomSberIDController extends BaseSberIDController { protected function handleSuccess(array $userInfo, string $accessToken, ?string $refreshToken) { // Ваша логика успешной авторизации $user = User::firstOrCreate( ['sberid_sub' => $userInfo['sub']], ['email' => $userInfo['email'] ?? null] ); auth()->login($user); return redirect()->route('dashboard'); } protected function handleError(string $error, string $description) { // Ваша обработка ошибок \Log::error("Ошибка Sber ID: {$error} - {$description}"); return redirect()->route('login') ->with('error', 'Не удалось войти через Сбер ID'); } }
API Справочник
Методы SberIDClient
getAuthorizationUrl(string $state = null, string $nonce = null): string
Генерирует URL авторизации для перенаправления пользователей на Sber ID.
getAccessToken(string $code): array
Обменивает код авторизации на access token, refresh token и ID token.
Возвращает:
[
'access_token' => 'string', // Access token (60 секунд)
'token_type' => 'bearer',
'expires_in' => 60,
'scope' => 'openid name email',
'id_token' => 'string',
'refresh_token' => 'string' // Refresh token (30 дней)
]
refreshAccessToken(string $refreshToken): array
Обновляет истекший access token используя refresh token.
getUserInfo(string $accessToken): array
Получает информацию профиля пользователя используя access token.
confirmAuthenticationSuccess(string $accessToken): bool
Отправляет аналитическое событие в Sber ID (обязательно в production).
decodeIdToken(string $idToken): array
Декодирует и возвращает содержимое ID token.
SberIDException
Класс исключений для ошибок Sber ID API.
Методы:
getErrorCode(): string- Возвращает код ошибкиgetErrorDescription(): string- Возвращает описание ошибки
Распространенные коды ошибок:
invalid_request- Неверные параметры запросаinvalid_client- Неверные учетные данные клиентаinvalid_grant- Неверный код авторизации или refresh tokenunauthorized_client- Клиент не авторизованunsupported_grant_type- Тип grant не поддерживаетсяinvalid_scope- Неверный или неавторизованный scopeaccess_denied- Пользователь отклонил авторизацию
Доступные скоупы
Базовые скоупы (Light пакет)
| Скоуп | Описание | Поля |
|---|---|---|
openid |
Идентификатор пользователя (обязательно) | sub |
name |
ФИО | family_name, given_name, middle_name |
email |
Email адрес | email |
phone |
Номер телефона | phone_number |
birthdate |
Дата рождения | birthdate |
gender |
Пол | gender |
Расширенные скоупы (Standard пакет)
| Скоуп | Описание | Поля |
|---|---|---|
identification |
Паспортные данные | identification.* |
inn |
ИНН | inn.number |
snils |
СНИЛС | snils.number |
driving_license |
Водительское удостоверение | driving_license.number |
address_reg |
Адрес регистрации | address_reg.* |
address_of_actual_residence |
Адрес проживания | Как address_reg |
work_address |
Рабочий адрес | Как address_reg |
delivery_address |
Адрес доставки | Как address_reg |
Professional скоупы
| Скоуп | Описание |
|---|---|
priority_doc |
Приоритетный документ |
citizenship |
Гражданство |
place_of_birth |
Место рождения |
sts |
СТС |
previous_identification |
Предыдущий паспорт |
previous_name |
Предыдущее ФИО |
education |
Образование |
place_of_work |
Место работы |
job_title |
Должность |
marital_status |
Семейное положение |
Примеры использования скоупов
Только авторизация:
'scopes' => 'openid email'
Базовый профиль:
'scopes' => 'openid name email phone'
KYC (Знай своего клиента):
'scopes' => 'openid name birthdate identification inn snils address_reg'
Служба доставки:
'scopes' => 'openid name phone delivery_address'
Полный список: Документация Sber ID Scopes
Решение проблем
Проблемы установки
Не удается установить через Composer
- Проверьте версию PHP:
php -v(требуется 7.4+) - Обновите Composer:
composer self-update - Очистите кэш:
composer clear-cache
Service Provider не найден
- Выполните
composer dump-autoload - Очистите конфиг:
php artisan config:clear - Очистите кэш:
php artisan cache:clear
Проблемы конфигурации
Неверный Redirect URI
- Проверьте, что
SBERID_REDIRECT_URIточно совпадает с зарегистрированным в портале - Проверьте наличие завершающих слэшей
- Убедитесь в использовании HTTPS в production
Неверные учетные данные
- Проверьте
SBERID_CLIENT_IDиSBERID_CLIENT_SECRET - Проверьте на наличие лишних пробелов
- Убедитесь, что учетные данные для правильного окружения
Проблемы с SSL сертификатом
- Для разработки:
SBERID_VERIFY_SSL=false - Для production: проверьте путь и пароль сертификата
- Проверьте права доступа:
chmod 600 certificate.pem
Проблемы авторизации
Несовпадение параметра state
- Очистите cookies браузера и сессию
- Проверьте конфигурацию драйвера сессий
- Убедитесь, что middleware сессии активен
Код авторизации истек
- Не обновляйте страницу callback
- Реализуйте правильную обработку ошибок
- Направьте пользователя на повторную авторизацию
Неверный refresh token
- Проверьте, не истек ли токен (30 дней)
- Убедитесь, что запрашивался scope
offline_access - Не используйте один refresh token дважды
Отладка
Включите детальное логирование:
use Illuminate\Support\Facades\Log; try { $tokenData = SberID::getAccessToken($code); Log::info('Токен получен', ['expires_in' => $tokenData['expires_in']]); } catch (SberIDException $e) { Log::error('Ошибка Sber ID', [ 'error_code' => $e->getErrorCode(), 'error_description' => $e->getErrorDescription(), ]); }
Тестирование
Запуск тестов:
composer test
Мок клиента для тестирования:
use Tigusigalpa\SberID\SberIDClient; use Mockery; $mockClient = Mockery::mock(SberIDClient::class); $mockClient->shouldReceive('getAccessToken') ->andReturn([ 'access_token' => 'test-token', 'token_type' => 'bearer', 'expires_in' => 60, ]); $this->app->instance(SberIDClient::class, $mockClient);
Безопасность
Лучшие практики безопасности
1. Настройка окружения
Всегда используйте HTTPS в production:
APP_URL=https://ваш-домен.ru SBERID_REDIRECT_URI=https://ваш-домен.ru/auth/sberid/callback
Включите проверку SSL:
SBERID_VERIFY_SSL=true
Используйте production окружение для боевых сайтов:
SBERID_ENVIRONMENT=production
2. Управление учетными данными
Никогда не коммитьте учетные данные в систему контроля версий:
- Добавьте
.envв.gitignore - Используйте переменные окружения для всех чувствительных данных
- Регулярно меняйте учетные данные
Защитите файл .env:
chmod 600 .env
3. Хранение токенов
Шифруйте токены в базе данных:
'sberid_access_token' => encrypt($accessToken), 'sberid_refresh_token' => encrypt($refreshToken),
Никогда не раскрывайте токены в URL или логах:
// Плохо Log::info('Token: ' . $accessToken); // Хорошо Log::info('Токен получен', ['token_length' => strlen($accessToken)]);
4. Валидация параметра State
Всегда проверяйте параметр state:
if ($state !== session('sberid_state')) { abort(403, 'Неверный параметр state'); }
Используйте криптографически безопасные случайные строки:
$state = \Illuminate\Support\Str::random(40);
5. Безопасность сессий
Настройте безопасные параметры сессий:
// config/session.php 'secure' => env('SESSION_SECURE_COOKIE', true), 'http_only' => true, 'same_site' => 'lax',
6. Безопасность сертификатов
Защитите SSL сертификаты:
chmod 600 /path/to/certificate.pem
Храните сертификаты вне веб-корня:
/storage/certificates/sberid.pem ✓ Хорошо
/public/certificates/sberid.pem ✗ Плохо
7. Валидация входных данных
Проверяйте все параметры callback:
$code = $request->input('code'); if (!$code || !is_string($code)) { abort(400, 'Неверный код авторизации'); }
8. Ограничение частоты запросов
Реализуйте rate limiting на маршрутах авторизации:
Route::middleware(['throttle:10,1'])->group(function () { Route::get('/auth/sberid/redirect', [SberIDController::class, 'redirect']); Route::get('/auth/sberid/callback', [SberIDController::class, 'callback']); });
9. Обработка ошибок
Не раскрывайте чувствительную информацию в ошибках:
// Плохо return response()->json(['error' => $e->getMessage()]); // Хорошо Log::error('Ошибка авторизации', ['exception' => $e]); return response()->json(['error' => 'Ошибка авторизации']);
10. Безопасность базы данных
Используйте параметризованные запросы (Laravel делает это по умолчанию):
// Хорошо - Laravel ORM User::where('sberid_sub', $sub)->first(); // Избегайте сырых запросов с пользовательским вводом
Соображения безопасности
Время жизни токенов
- Access токены истекают через 60 секунд
- Refresh токены истекают через 30 дней
- Реализуйте логику обновления токенов
- Удаляйте истекшие токены из базы данных
Разрешения скоупов
- Запрашивайте только необходимые скоупы
- Пользователи могут отклонить определенные скоупы
- Корректно обрабатывайте отсутствующие данные скоупов
Управление сертификатами
- Сертификаты периодически истекают
- Отслеживайте срок действия сертификата
- Имейте процесс обновления сертификатов
Отслеживание аналитики
- Аналитика обязательна в production
- Неотправка аналитики может повлиять на сервис
- Реализуйте логику повторных попыток для аналитики
Соответствие требованиям
Защита данных: Этот пакет обрабатывает персональные данные. Обеспечьте соответствие:
- GDPR (если применимо)
- Федеральный закон РФ № 152-ФЗ
- Другие применимые нормы защиты данных
Согласие пользователя:
- Получайте согласие пользователя перед сбором данных
- Предоставьте политику конфиденциальности
- Позвольте пользователям отозвать согласие
- Реализуйте процедуры удаления данных
Сообщение об уязвимостях безопасности
Пожалуйста, не сообщайте об уязвимостях безопасности через публичные GitHub issues.
Если вы обнаружили уязвимость безопасности, отправьте email на: sovletig@gmail.com
Включите:
- Тип уязвимости
- Полные пути к файлам исходного кода, связанным с уязвимостью
- Пошаговые инструкции для воспроизведения проблемы
- Proof-of-concept или эксплойт код (если возможно)
- Влияние уязвимости
Сроки ответа:
- Подтверждение получения в течение 48 часов
- Оценка серьезности
- Координация исправления и раскрытия
- Упоминание в advisory по безопасности (если желаете)
Поддержка
Проблемы с пакетом
- GitHub Issues: https://github.com/tigusigalpa/sber-id-php/issues
- Email: sovletig@gmail.com
Проблемы с Sber ID API
- Email: support_sberid@sber.ru
- Портал: https://id.sber.ru/profile/b2b
Ссылки на документацию
Лицензия
Лицензия MIT. Подробности в файле LICENSE.
Автор
- Igor Sazonov
- Email: sovletig@gmail.com
Отказ от ответственности
Этот пакет не является официальным продуктом Сбербанка. Используйте на свой риск.