PHPackages                             tigusigalpa/yandex-id-oauth-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/yandex-id-oauth-php

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

tigusigalpa/yandex-id-oauth-php
===============================

Yandex ID OAuth client for PHP with Laravel 8-12 integration

v1.0.0(5mo ago)128MITPHPPHP ^7.4|^8.0|^8.1|^8.2

Since Nov 23Pushed 5mo agoCompare

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

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

Yandex ID OAuth PHP
===================

[](#yandex-id-oauth-php)

[![Yandex ID/OAuth PHP SDK](https://private-user-images.githubusercontent.com/2721390/517798181-87227db6-8d98-4c00-961d-bfe82e174021.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0MjcwMjEsIm5iZiI6MTc3NTQyNjcyMSwicGF0aCI6Ii8yNzIxMzkwLzUxNzc5ODE4MS04NzIyN2RiNi04ZDk4LTRjMDAtOTYxZC1iZmU4MmUxNzQwMjEucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDQwNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjA0MDVUMjIwNTIxWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZjBhZGZiMDllN2UxNGVmMDA3NDkzN2MxNTNjY2VmNzJlYThlMjlkYTU2YzE1NGNjMGJkYTkzNDJkZTcyMGFiZSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.P1CePDVev621QYlRcr0BCuxilXlQ1RFNbDMuG_bCTbY)](https://private-user-images.githubusercontent.com/2721390/517798181-87227db6-8d98-4c00-961d-bfe82e174021.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU0MjcwMjEsIm5iZiI6MTc3NTQyNjcyMSwicGF0aCI6Ii8yNzIxMzkwLzUxNzc5ODE4MS04NzIyN2RiNi04ZDk4LTRjMDAtOTYxZC1iZmU4MmUxNzQwMjEucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDQwNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjA0MDVUMjIwNTIxWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZjBhZGZiMDllN2UxNGVmMDA3NDkzN2MxNTNjY2VmNzJlYThlMjlkYTU2YzE1NGNjMGJkYTkzNDJkZTcyMGFiZSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.P1CePDVev621QYlRcr0BCuxilXlQ1RFNbDMuG_bCTbY)

 [ ![PHP Version](https://camo.githubusercontent.com/b43c9d6cd8939c4868f963284928566c4c35dd2da0725c027f95a3d62f2f0329/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d372e342532422d626c75652e737667) ](https://github.com/tigusigalpa/yandex-id-oauth-php) [ ![Laravel Version](https://camo.githubusercontent.com/07a3eedcfff83427e6b983bcde8fe4d6f30ec3bbd354ec460ac2b29f6baf78c9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d38253243253230392532432532303130253243253230313125324325323031322d7265642e737667) ](https://github.com/tigusigalpa/yandex-id-oauth-php) [ ![License](https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667) ](https://github.com/tigusigalpa/yandex-id-oauth-php/blob/master/LICENSE)

 **🔐 Полнофункциональный OAuth клиент для Яндекс ID с бесшовной интеграцией в Laravel**

 *Авторизация через Яндекс ID: построение URL, обмен кода на токен, обновление токена и получение профиля пользователя*

> 📖 **English version:** [here](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)
- [🔧 Создание приложения в Яндекс OAuth](#-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B2-%D1%8F%D0%BD%D0%B4%D0%B5%D0%BA%D1%81-oauth)
- [💾 Установка](#-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)
- [⚙️ Интеграция с Laravel](#%EF%B8%8F-%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D1%81-laravel)
- [🎯 Конфигурация](#-%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D1%8F)
- [📖 Использование](#-%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)
- [🛡️ Обработка ошибок](#%EF%B8%8F-%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA)
- [📚 Документация](#-%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F)

---

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

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

- ✅ **`authUrl()`** — формирование URL для авторизации (`response_type=code`)
- ✅ **`exchangeCode()`** — обмен кода подтверждения на OAuth‑токен (возвращает `TokenResponse`)
- ✅ **`refreshToken()`** — обновление токена по `refresh_token` (возвращает `TokenResponse`)
- ✅ **`getUserInfo()`** — получение профиля пользователя по `access_token` (возвращает `UserInfo`)
- ✅ **`revokeToken()`** — отзыв токена доступа
- 🎯 **Полная интеграция с Laravel**: сервис‑провайдер, фасад, публикуемый конфиг
- 🔒 **PKCE поддержка** для enhanced security
- ⚡ **Пользовательские исключения** для детальной обработки ошибок
- 📝 **PSR-3 логирование** с автоматической интеграцией с Laravel
- 🏗️ **DTO классы** для структурированных ответов

---

🔧 Создание приложения в Яндекс OAuth
------------------------------------

[](#-создание-приложения-в-яндекс-oauth)

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

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

1. Перейдите в [консоль Яндекс OAuth](https://oauth.yandex.ru/)
2. Нажмите кнопку **"+ Создать"**
3. Во всплывающем окне укажите тип приложения:
    - ✅ **Для авторизации пользователей** (рекомендуется для веб-сервисов)
    - Для доступа к API или отладки

### Шаг 2: Основная информация

[](#шаг-2-основная-информация)

**Шаг 1/4:**

- 📝 **Название вашего сервиса** — введите название вашего приложения
- 🖼️ **Иконка сервиса** — прикрепите иконку (рекомендуется 128x128px)
- 📧 **Почта для связи** — укажите контактный email

**Шаг 2/4:**

- 🌐 **Платформы приложений** — обязательно выберите **"Веб-сервисы"**
- 🔗 **Redirect URI** — введите URL для перенаправления после авторизации: ```
    https://your.app/callback/yandex

    ```
- 🏠 **Suggest Hostname** — хост страницы, на которой разместится кнопка авторизации

### Шаг 3: Права доступа

[](#шаг-3-права-доступа)

**Шаг 3/4:**Выберите необходимые права доступа к данным пользователей:

- 📅 **Доступ к дате рождения**
- 📧 **Доступ к адресу электронной почты**
- 👤 **Доступ к логину, имени и фамилии, полу**
- 📸 **Доступ к портрету пользователя**
- 📱 **Доступ к номеру телефона**

> 💡 **Совет:** Выберите только те права, которые действительно необходимы вашему приложению.

### Шаг 4: Завершение

[](#шаг-4-завершение)

**Шаг 4/4:**

- ✅ Проверьте все введенные данные
- ✅ Нажмите "Создать приложение"

После создания вам будут выданы:

- 🔑 **Client ID** — идентификатор клиента
- 🔐 **Client Secret** — секретный ключ

> 📖 **Документация:** Мы используем метод подтверждения через получение `code` из специального URL. [Подробнее в документации Яндекса](https://yandex.ru/dev/id/doc/ru/codes/code-url)

---

💾 Установка
-----------

[](#-установка)

1. Добавьте репозиторий типа `path` в корневой `composer.json` вашего проекта:

    ```
    {
      "repositories": [
        { "type": "path", "url": "public_html/packages/yandex-id-oauth-php" }
      ]
    }
    ```
2. Установите пакет:

    ```
    composer require tigusigalpa/yandex-id-oauth-php --prefer-source
    ```

---

⚙️ Интеграция с Laravel
-----------------------

[](#️-интеграция-с-laravel)

- 🔄 **Авто‑обнаружение провайдера и фасада** включено
- 📋 **Публикация конфига:**```
    php artisan vendor:publish --tag=yandexid-config
    ```

---

🎯 Конфигурация
--------------

[](#-конфигурация)

`config/yandexid.php` управляется через `.env`:

ПеременнаяОписаниеПример`YANDEX_ID_CLIENT_ID`ID вашего приложения`your_client_id``YANDEX_ID_CLIENT_SECRET`Секретный ключ`your_client_secret``YANDEX_ID_REDIRECT_URI`URL для редиректа`https://your.app/callback/yandex``YANDEX_ID_SCOPE`Права доступа`login:email login:info``YANDEX_ID_FORCE_CONFIRM`Принудительное подтверждение`false``YANDEX_ID_AUTH_BASE`Базовый URL OAuth`https://oauth.yandex.ru``YANDEX_ID_USER_INFO_ENDPOINT`URL информации о пользователе`https://login.yandex.ru/info``YANDEX_ID_USER_INFO_AUTH`Тип авторизации`OAuth`**Пример `.env`:**

```
YANDEX_ID_CLIENT_ID=your_client_id
YANDEX_ID_CLIENT_SECRET=your_client_secret
YANDEX_ID_REDIRECT_URI=https://your.app/callback/yandex
YANDEX_ID_SCOPE=login:email login:info
YANDEX_ID_FORCE_CONFIRM=false
YANDEX_ID_USER_INFO_AUTH=OAuth
```

---

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

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

### Через фасад

[](#через-фасад)

```
use Tigusigalpa\YandexID\Facades\YandexId;
use Tigusigalpa\YandexID\Dto\TokenResponse;
use Tigusigalpa\YandexID\Dto\UserInfo;

// 🎯 Получение URL авторизации
$url = YandexId::authUrl(state: 'abc123');

// 🔄 Обмен кода на токен (возвращает TokenResponse)
$token = YandexId::exchangeCode($code);
echo $token->accessToken; // string
echo $token->expiresIn;   // int|null

// 👤 Получение информации о пользователе (возвращает UserInfo)
$profile = YandexId::getUserInfo($token->accessToken);
echo $profile->getDisplayName(); // string
echo $profile->getPrimaryEmail(); // string|null

// 🔄 Обновление токена
$refreshed = YandexId::refreshToken($token->refreshToken);

// 🗑️ Отзыв токена
$success = YandexId::revokeToken($token->accessToken);
```

### PKCE и проверка state

[](#pkce-и-проверка-state)

```
use Tigusigalpa\YandexID\Facades\YandexId;

// 🔐 Генерация ссылки авторизации с PKCE
$auth = YandexId::authUrlWithPkce(state: null, prompt: null);
// Сохраните $auth['state'] и $auth['verifier'] в сессии
$url = $auth['url'];

// ✅ После редиректа проверьте state
$isValid = YandexId::validateState($_GET['state'] ?? '', session('yandex_state'));
if (!$isValid) {
    // обработка ошибки CSRF
}

// 🔄 Обмен кода на токен по PKCE
$tokens = YandexId::exchangeCodeWithPkce($_GET['code'], session('yandex_verifier'));
```

### Через DI

[](#через-di)

```
use Tigusigalpa\YandexID\YandexIdClient;

public function __construct(YandexIdClient $yandex)
{
    $this->yandex = $yandex;
}

$url = $this->yandex->authUrl('xyz');
$token = $this->yandex->exchangeCode($code); // TokenResponse
$profile = $this->yandex->getUserInfo($token->accessToken); // UserInfo
```

### Использование без Laravel (Standalone PHP)

[](#использование-без-laravel-standalone-php)

Библиотека может использоваться без Laravel как обычный PHP пакет:

```
