- PVSM.RU - https://www.pvsm.ru -
Представляем yet another PHP-пакет интеграции с ЕСИА — ekapusta/oauth2-esia
[1]. Реализован как адаптер к популярному league/oauth2-client
[2].
Интеграция с ЕСИА затрагивает госорганы, финансовые и страховые компании, кредитные организации (банки, микрофинансы), организации с публичным wi-fi'ем и прочих, кому в будущем правительство даст добро. Основные оргмоменты описаны на хабре по запросу "ЕСИА [3]", актуальные версии документов доступны на оф. сайте http://minsvyaz.ru/ru/documents/?directions=13 [4], а поддержку можно получить в относительно разумные сроки через esia@minsvyaz.ru [5].
embeds
. Т.е. для получения контактов/адресов не надо будет делать ещё N отдельных запросов.league/oauth2-client
[2], к которому является адаптером, не изобретая велосипеды и сам покрыт тестами на 100%.ramsey/uuid
[10] и lcobucci/jwt
[11].^ 5.6 || ^ 7.0
.use EkapustaOAuth2EsiaProviderEsiaProvider;
use EkapustaOAuth2EsiaSecuritySignerOpensslPkcs7;
$provider = new EsiaProvider([
'clientId' => 'XXXXXX', // "Мненомика" в терминах ЕСИА
'redirectUri' => 'https://your-system.domain/auth/finish/',
'defaultScopes' => ['openid', 'fullname', '...'], // Скоупы описаны в методичке
// Для работы с тестовой версией портала
// 'remoteUrl' => 'https://esia-portal1.test.gosuslugi.ru',
// 'remoteCertificatePath' => EsiaProvider::RESOURCES.'esia.test.cer',
], [
'signer' => new OpensslPkcs7('/path/to/public/certificate.cer', '/path/to/private.key')
]);
OpensslPkcs7
.OpensslPkcs7
.OpensslCli
. Он имеет параметр «toolpath».OpensslCli
с параметром 'toolpath' => 'docker run -rm -v $(pwd):$(pwd) -w $(pwd) rnix/openssl-gost openssl'
.Одновременно сохраняя стейт для последующей проверки.
// Где-то страничке https://your-system.domain/auth/start/
$authUrl = $provider->getAuthorizationUrl();
$_SESSION['oauth2.esia.state'] = $provider->getState();
header('Location: '.$authUrl);
exit;
Проверяя стейт и меняя код на аутентификационный токен.
// Где-то страничке https://your-system.domain/auth/finish/?state=...&code=...
if ($_SESSION['oauth2.esia.state'] !== $_GET['state']) {
exit('The guard unravels the crossword.');
}
$token = $provider->getAccessToken('authorization_code', ['code' => $_GET['code']]);
$esiaPersonData = $provider->getResourceOwner($accessToken);
var_export($esiaPersonData->toArray());
Стандартно, как описано в документации к oauth2-client
: https://github.com/thephpleague/oauth2-client#refreshing-a-token [12]
Пакет заоперсорсен финтех-компанией в которой я работаю. Не тестировалось на животных.
Автор: garex
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/280734
Ссылки в тексте:
[1] ekapusta/oauth2-esia
: https://packagist.org/packages/ekapusta/oauth2-esia
[2] league/oauth2-client
: https://packagist.org/packages/league/oauth2-client
[3] ЕСИА: https://habr.com/search/?q=%D0%95%D0%A1%D0%98%D0%90
[4] http://minsvyaz.ru/ru/documents/?directions=13: http://minsvyaz.ru/ru/documents/?directions=13
[5] esia@minsvyaz.ru: mailto:esia@minsvyaz.ru
[6] Image: https://travis-ci.org/ekapusta/oauth2-esia
[7] Image: https://coveralls.io/github/ekapusta/oauth2-esia?branch=develop
[8] Image: https://github.com/ekapusta/oauth2-esia/blob/develop/LICENSE.md
[9] Image: https://esia.gosuslugi.ru/
[10] ramsey/uuid
: https://packagist.org/packages/ramsey/uuid
[11] lcobucci/jwt
: https://packagist.org/packages/lcobucci/jwt
[13] Источник: https://habr.com/post/358834/?utm_campaign=358834