README
Компонент для авторизации на портале “Госуслуги”
Основано на этом компоненте.
В этом форке был добавлена возможность обновлять access_token с помощью refresh_token’ов
Также при успешной авторизации значения refresh_token и expires_in сохраняются в память – есть возможность сохранить их в БД/сессию и тд
Composer
composer require belazz/esia-legacy
Как использовать
Пример получения ссылки для авторизации
Пример получения токена и информации о пользователе
Обновление токена
Также возвращаемое кол-во секунд expires_in сохраняется в Config $config объект, доступно через:
Проверку актуальный ли ещё токен нужно реализовать самому. Например, с использованием Carbon:
expires_in должен быть сохранен в каком-либо хранилище (также как и access_token, refresh_token и oid), соотв. при сравнении забираем его оттуда
Конфиг
token – access_token
refreshToken – refresh_token (нужен для запроса нового access_token без участия пользователя)
tokenExpiresIn – через сколько действие access_token’a закончится, указывается в секундах
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 способа:
- oid содержится в jwt токене, расшифровав его
- После получения токена oid сохраняется в config и получить можно так
Переиспользование Токена
Дополнительно укажите токен и идентификатор в конфиге
//$scope = ‘openid’;
‘openid fullname usr_org email’
//$scope = ‘fullname’;
//$scope = ‘usr_org’;
‘Y.m.d H:i:s O’
// encrypt it
//*****************файл funcfunc20171012.php (общие процедуры функции)***************
//************************************************ЗАПРОС НА все нужные СКОУПы *****************************************
//$scope = ‘openid’;
‘openid fullname usr_org email’
//$scope = ‘fullname’;
//$scope = ‘usr_org’;
//$scope = ‘snils’;
‘Y.m.d H:i:s O’
// Убираем последний символ & из строки $post_data_text
//’Accept-Encoding: gzip, deflate’,
// Создание общего запроса (заголовки и тело запроса)
// chr(13).chr(10) равно ”
” – перевод каретки
// Открытие сокета
//есть настройка в php.ini max_execution_time
// -2 to remove the ”
” before the next chunk
// проверка полученного ответа
//**********закомментировать н ******************
//**********закомментировать кон ******************
//****************************************получение полного имени пользователя ********************************
//****************************************получение email пользователя (1. доступ к перечню контактов “ctts” 2. получение контактов)********************************
“GET $path HTTP/1.1
”
“Authorization: Bearer ”
;
//*************************scope openid fullname usr_org email****************************************************************************************
//ПОЛУЧЕНИЕ ИНФОРМАЦИИ ПО ОРГАНИЗАЦИЯМ , В КОТОРЫХ СОСТОИТ ПОЛЬЗОВАТЕЛЬ