PHPackages                             tigusigalpa/sber-id-php - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. tigusigalpa/sber-id-php

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

tigusigalpa/sber-id-php
=======================

Laravel package for Sber ID (SberBank OAuth) integration

v1.0.0(4mo ago)92MITPHPPHP ^7.4|^8.0|^8.1|^8.2|^8.3

Since Dec 22Pushed 4mo agoCompare

[ Source](https://github.com/tigusigalpa/sber-id-php)[ Packagist](https://packagist.org/packages/tigusigalpa/sber-id-php)[ RSS](/packages/tigusigalpa-sber-id-php/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (5)Versions (2)Used By (0)

Sber ID PHP/Laravel Пакет
=========================

[](#sber-id-phplaravel-пакет)

[![SberID PHP](https://private-user-images.githubusercontent.com/2721390/529301890-99d71232-02bc-4156-8594-4f8f243a4555.jpg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM5MTQ3MjgsIm5iZiI6MTc3MzkxNDQyOCwicGF0aCI6Ii8yNzIxMzkwLzUyOTMwMTg5MC05OWQ3MTIzMi0wMmJjLTQxNTYtODU5NC00ZjhmMjQzYTQ1NTUuanBnP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDMxOSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAzMTlUMTAwMDI4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9M2JiZTVhMTRiNTM5Nzg0ODVlYjlhYmIxNmQ4NDkzNDMxYmM3MDlhMTA0Y2FjM2NjNjljMDFjZGIxZTNiZTE4YSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.UyrsXJHB8iD0Q2js9ZATYfeL45T0UfRobloRGveGaz4)](https://private-user-images.githubusercontent.com/2721390/529301890-99d71232-02bc-4156-8594-4f8f243a4555.jpg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzM5MTQ3MjgsIm5iZiI6MTc3MzkxNDQyOCwicGF0aCI6Ii8yNzIxMzkwLzUyOTMwMTg5MC05OWQ3MTIzMi0wMmJjLTQxNTYtODU5NC00ZjhmMjQzYTQ1NTUuanBnP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDMxOSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAzMTlUMTAwMDI4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9M2JiZTVhMTRiNTM5Nzg0ODVlYjlhYmIxNmQ4NDkzNDMxYmM3MDlhMTA0Y2FjM2NjNjljMDFjZGIxZTNiZTE4YSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.UyrsXJHB8iD0Q2js9ZATYfeL45T0UfRobloRGveGaz4)

[![Latest Version on Packagist](https://camo.githubusercontent.com/65ad87beb11a3e57988bfc3b56e5e12366dc03be6f6ee0edae735b8c33c8f066/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f74696775736967616c70612f736265722d69642d7068702e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/tigusigalpa/sber-id-php)

Laravel пакет для интеграции с Sber ID (OAuth авторизация через Сбер). Поддержка тестового и промышленного окружения.

**🌐 Язык:** Русский | [English](README-en.md)

Содержание
----------

[](#содержание)

- [Возможности](#%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8)
- [Требования](#%D1%82%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
- [Установка](#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)
- [Настройка](#%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0)
- [Использование](#%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
- [API Справочник](#api-%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA)
- [Доступные скоупы](#%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D1%8B%D0%B5-%D1%81%D0%BA%D0%BE%D1%83%D0%BF%D1%8B)
- [Решение проблем](#%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC)
- [Тестирование](#%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
- [Безопасность](#%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C)
- [Поддержка](#%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0)
- [Лицензия](#%D0%BB%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F)

Возможности
-----------

[](#возможности)

- ✅ Полная реализация 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: Установка пакета

[](#шаг-1-установка-пакета)

Установите пакет через Composer:

```
composer require tigusigalpa/sber-id-php
```

### Шаг 2: Публикация конфигурации

[](#шаг-2-публикация-конфигурации)

Опубликуйте конфигурационный файл:

```
php artisan vendor:publish --tag=sberid-config
```

Это создаст файл `config/sberid.php` в вашем Laravel приложении.

### Шаг 3: Регистрация приложения

[](#шаг-3-регистрация-приложения)

Зарегистрируйте приложение на [портале Sber ID](https://id.sber.ru/profile/b2b) для получения:

- Client ID
- Client Secret
- SSL сертификата (для production)

### Шаг 4: Настройка окружения

[](#шаг-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: Миграция базы данных (опционально)

[](#шаг-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`stringsandboxОкружение: '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`stringopenid name email phoneСкоупы через пробел`SBERID_REQUEST_REFRESH_TOKEN`booltrueЗапрос refresh token`SBERID_CERTIFICATE_PATH`string-Путь к SSL сертификату`SBERID_CERTIFICATE_PASSWORD`string-Пароль сертификата`SBERID_VERIFY_SSL`booltrueПроверка SSL сертификатов`SBERID_SEND_ANALYTICS`booltrueОтправка аналитических событий`SBERID_TIMEOUT`int10Таймаут запроса (секунды)### Окружения

[](#окружения)

**Sandbox (Тестовое)**

- Базовый URL: `https://oauth-ift.sber.ru`
- Используйте для разработки и тестирования
- Установите `SBERID_ENVIRONMENT=sandbox`

**Production (Промышленное)**

- Базовый URL: `https://oauth.sber.ru`
- Требуется SSL сертификат
- Аналитические события обязательны
- Установите `SBERID_ENVIRONMENT=production`

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

[](#использование)

### Базовое использование со встроенными маршрутами

[](#базовое-использование-со-встроенными-маршрутами)

Пакет предоставляет готовые маршруты:

```

Войти через Сбер ID

```

### Пользовательская реализация

[](#пользовательская-реализация)

#### 1. Перенаправление на Sber ID

[](#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

[](#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

[](#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)

Пакет можно использовать в любом PHP приложении без Laravel:

#### 1. Инициализация клиента

[](#1-инициализация-клиента)

```
