farit-slv/esia-connector

OpenID ESIA authenticating

1.1.0 2024-02-08 18:49 UTC

This package is auto-updated.

Last update: 2024-11-08 20:29:22 UTC


README

Описание

Компонент для авторизации и получения данных на портале "Госуслуги".

Библиотека основана на SbWereWolf/esia-connector и skiexx/esia-connector, замена стандартной PHP функции file_get_contents на cURL.

Соответственно этому подписывателю для подписания произвольного текста не требуется приватный ключ (подписывание происходит на веб сервисе), соответственно объект конфигурации не требует путей до приватного ключа и сертификата.

В качестве внешнего подписывателя можно использовать CryptoPro

Внимание!

Основная цель библиотеки - получение токена. Получив токен вы можете выполнять любые API запросы. Библиотека предоставляет только самые базовые запросы для получения данных.

Установка

При помощи composer:

composer require farit-slv/esia-connector

Пример использования

Пример использования в test.php

Предварительно:

  • Развернуть сервис веб подписи CryptoPro
  • Соответственно запустить с параметрами по умолчанию, так что бы по адресу http://localhost:3037/cryptopro/sign происходила обработка POST запроса на подписание произвольного текста, сигнатура вызова {"text": "$message"} (использовать формат JSON)

Как запустить:

  • cd ./example/
  • php -S localhost:8000 test.php
  • Открыть в браузере localhost:8000
  • Перейти по ссылке Войти через портал ГосУслуги
  • Выполнить аутентификацию на портале ГосУслуг
  • Авторизовать для вашей организации доступ к данным профиля пользователя (ГосУслуг)
  • Произойдёт редирект на localhost:8000
  • На странице будут отображены данные полученные с ГосУслуг

Как использовать

Пример получения ссылки для авторизации

<?php 
$config = new \Esia\ConfigWithoutKeyPair([
    'clientId' => 'U407501', /* Код вашей организации в ЕСИА */
    'redirectUrl' => 'http://localhost:8000/',
    'portalUrl' => 'https://esia-portal1.test.gosuslugi.ru/',
    'scope' => [
        'fullname', /* Просмотр вашей фамилии, имени и отчества */
    ],
]);

$signer = new HttpSigner(
    'http://localhost:3037/cryptopro/sign',
    [
        'Content-Type' => 'application/json',
        'accept' => '*/*',
    ],
    'POST',
);

$esia = new \Esia\OpenId($config);
$esia->setSigner($signer);

<a href="<?=$esia->buildUrl()?>">Войти через портал госуслуги</a>

После редиректа на ваш redirectUrl вы получите в $_GET['code'] код для получения токена

Пример получения токена и информации о пользователе

$esia = new \Esia\OpenId($config);
$esia->setSigner(new \Esia\SignerPKCS7(
    $config->getCertPath(),
    $config->getPrivateKeyPath(),
    $config->getPrivateKeyPassword(),
    $config->getTmpPath()
));

// Вы можете использовать токен в дальнейшем вместе с oid 
$token = $esia->getToken($_GET['code']);

$personInfo = $esia->getPersonInfo();

Конфиг

clientId - ID вашего приложения.

redirectUrl - URL куда будет перенаправлен ответ с кодом.

portalUrl - по умолчанию: https://esia-portal1.test.gosuslugi.ru/. Домен портала для авторизация (только домен).

codeUrlPath - по умолчанию: aas/oauth2/ac. URL для получения кода.

tokenUrlPath - по умолчанию: aas/oauth2/te. URL для получение токена.

scope - по умолчанию: fullname birthdate gender email mobile id_doc snils inn. Запрашиваемые права у пользователя.

privateKeyPath - путь до приватного ключа.

privateKeyPassword - пароль от приватного ключа.

certPath - путь до сертификата.

tmpPath - путь до дериктории где будет проходить подпись (должна быть доступна для записи).

Токен и oid

Токен - jwt токен которые вы получаете от ЕСИА для дальнейшего взаимодействия

oid - уникальный идентификатор владельца токена

Как получить oid?

Если 2 способа:

  1. oid содержится в jwt токене, расшифровав его
  2. После получения токена oid сохраняется в config и получить можно так
$esia->getConfig()->getOid();

Переиспользование Токена

Дополнительно укажите токен и идентификатор в конфиге

$config->setToken($jwt);
$config->setOid($oid);