© 2014 - 2024 esia.pro
FAQ PHP
Вопрос | Ответ |
---|---|
При перенаправлении обратно на сайт ничего не происходит: ни авторизация, ни регистрация | В параметрах компоненты 'OAuth2LogoutUri', 'OAuth2AuthUri', 'OAuth2RefreshTokenUri', 'OAuth2UnTrustedUserRedirectURI' необходимо указать URI вашей системы ('OAuth2OnlyTrustedUsers' нужно убрать, в вашей версии компоненты он не используется) |
Как переключиться в прод? | Параметры: OAuth2IsTestEnvironment нужно установить в false OAuth2Site => https://esia.gosuslugi.ru OAuth2IsTestEnvironment => false Если логирование не нужно: OAuth2IsDebug => false |
Какой сертификат используется для проверки подписи ЕСИА при взаимодействии с промышленным контуром? | Если файл сертификата лежит в директории по умолчанию и в параметрах не указан полный путь, то файл должен называться esia-prod.crt для прода и esia-test.crt для теста |
Каким образом происходит переключение между использованием RSA и ГОСТ | Для определения алгоритма подписания запросов со стороны вашей системы есть специальный параметр, задающий алгоритм. В случае проверки подписи ЕСИА проверяется заголовок маркера доступа и на основе его информации определяется алгоритм, которым необходимо проверить подпись токена. |
В логах вижу ошибку с refresh_token, но при этом авторизация работает. Уточните, как исправить? OAuth2\Utils\ Exceptions\OAuth2GetParameterException Error code[4], line[438] in [/OAuth2/Utils/OAuth2Configuration.php] Some parameter(s) value(s) is not correct refresh_token Также пришлось указать тип алгоритма в параметре OAuth2CryptoAlg, без этого авторизация не работала |
Ошибка отсутствия refresh_token означает, что при повторном запросе данных у ЕСИА, если время жизни маркера доступа истекло, будет запрошена авторизация у пользователя. При наличии refresh_token запроса авторизации не происходит, а происходит обмен маркера обновления на маркер доступа. Если ваша система не часто перезапрашивает данные пользователя, то это не критично. Если часто, то значение refresh_token лучше где-то хранить и передавать его в параметре OAuth2StrObjARE. При этом получить строковое представление refresh_token можно с помощью метода getESIAResponse() класса OAuth2RequestToken сразу после получения токена доступа. Параметр OAuth2CryptoAlg устанавливается по умолчанию в значение GOST3410_2012_256, что соответствует использованию ГОСТ2012, если Вы установили значение RS256, то будет использоваться RSA. |
Для чего задаётся OAuth2RefreshTokenUri | OAuth2RefreshTokenUri - это URL по которому выпоняется переход в случае, когда в системе обнаружен refresh_token. Например, может быть такой URL. Cистема, получив параметр refresh_token, осуществляет обработку токена обновления. Если нет необходимости хранить и обрабатывать токен обновления, то в этом параметре можно задать тот же URL, что URL возврата после авторизации Обработка в этой точке подключения практически ничем не отличается от обработки в точке возврата после авторизации. Единственное, что можно предусмотреть, так это извлечение ранее сохранённого токена обновления из базы или сессионной переменной и передача этого значения в объект конфигурации с помощью метода setObjARE(ARE Object - объект, полученный в результате запроса токена у ЕСИА) или включения токена через параметр конфигурации OAuth2StrObjORE. |
Что делать в случае возникновения ошбики: Fatal error: OAuth2\Utils\Exceptions\OAuth2ConfigException: [0]: Wrong config parameters list Some parameters not specified: array ( 3 => 'OAuth2RefreshTokenUri', ) in /var/www/html/esiagost/OAuth2 /Utils/OAuth2Configuration.php on line 380? |
Нужно в конфигурацию модуля добавить параметр OAuth2RefreshTokenUri и указать для него URL, например, такой: https://yoursite.ru/auth_call_back?refresh_token=true |
Учётная запись пользователя не соответствует установленному уровню безопасности | По умолчанию CONFIRMED, то есть все УЗ авторизуемых пользователей должны быть подтвержденными, а судя по данным текущего пользователя его УЗ не соответствует этому уровню, поскольку признак trusted = false Изменить уровень безопасности можно с помощью параметра OAuth2UserAccountTypes. Он может принимать одно из значений: OAuth2Configuration::USER_ACCOUNT_SIMPLIFIED OAuth2Configuration::USER_ACCOUNT_STANDARD OAuth2Configuration::USER_ACCOUNT_CONFIRMED |
Как получать данные другого scope не заданного в модуле | Чтобы получить данные scope необходимо их запросить, например таким образом: $docs_list_url = $this->config["site"] . "/rs/prns/${user_id}/docs?embed=(elements)" ; $docs_list = $this->get($docs_list_url, $header) ; то есть сформировать URI и отправить Get-запрос к ЕСИА, в котором обязательно должен присутствовать заголовок, содержащий токен доступа. Особенности обращения к scope описаны в методических рекомендациях https://digital.gov.ru/ru/documents/6186/ |
Какие значения необходимо передавать в параметры модуля? | Значения для параметров модуля необходимо задавать самостоятельно. В данном случае важно передать запрос соответствующей требованиям протокола и подписанный верным ключом. В списке параметров модуля необходимо изменить следующее: site - URI системы - поставщика услуг, по которому необходимо отправлять запросы (для авторизации, логаута) logout_uri - URI клиентской системы, по которому осуществляется редирект после логаута на портале Госуслуг auth_uri - URI клиентской системы, по которому осуществляется редирект после авторизации на портале Госуслуг client_id - мнемоника ИС scope - области данных к которым предоставляется доступ после авторизации в ЕСИА cert_path - путь к файлу, содержащему открытую часть ключа ИС. pkey_path - путь к файлу, содержащему закрытую часть ключа ИС. |
Что передавать в качестве oid при запросе данных scope? | Значение можно получить из json полученного от ЕСИА после авторизации на портале госуслуг. $oid = $json->{'urn:esia:sbj\_id'} Затем подставляем $oid в запрос $this->config["site"] . "/rs/prns/${oid}/ctts?embed=(elements)" Далее отправляем get запрос, в котором указываем то что получилось + заголовок Authorization: Bearer ${access_token} |
Что можно использовать в качестве идентификатора пользователя при получении данных по OAuth протоколу? | Со стороны ЕСИА можно получить urn:esia:sb_id. Это идентификатор субъекта, в качестве значения указывается oid этот идентификатор уникален для каждого субъекта, зарегистрированного в ЕСИА. |
Какой тип данных необходимо указать в пользовательской ИС для хранения поля содержащего идентификатор пользователя на основе urn:esia:sbj_id? | Это поле можно использовать только как числовое, как длинное целое (типа long int в Java). Но только беззнаковое (unsigned), поскольку отрицательных значений быть не может. |
Что делать если команда openssl не выполняется под Windows? | Необходимо установить утилиту openssl для OC Windows. Ее можно скачать здесь. После установки проверьте, что утилита работает корректно. Для этого выполните команду: \"C:\Program Files (x86)\GnuWin32\bin\openssl.exe\" smime -sign -in \"${infile}\" -signer \"${cert}\" -inkey \"${pkey}\" -outform DER -out \"${outfile}\" Только нужно указать свои пути: \"${infile}\" - путь ко входному файлу, который шифруем \"${cert}\" - путь к файлу сертификата \"${pkey}\" - путь к файлу ключа \"${outfile}\" - путь для выходного файла В функции private function sign($params) заменить строки: $command = "openssl smime -sign -in ${infile} -signer ${cert} -inkey ${pkey} -outform DER -out ${outfile} > /dev/null 2>&1"; exec($command); на: $command = "\"C:\Program Files (x86)\GnuWin32\bin\openssl.exe\" smime -sign -in \"${infile}\" -signer \"${cert}\" -inkey \"${pkey}\" -outform DER -out \"${outfile}\""; $command = str_replace('/','\\', $command); exec($command); заменив путь к утилите openssl на свой. |
Что делать если без прокси-сервера авторизация через ЕСИА работала, а с прокси-сервером не работает? Выдает ошибку “A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond …” | В этом случае необходимо разрешить на прокси-сервере прием данных от серверов ЕСИА или организовать обмен данными с ЕСИА в обход прокси-сервера. |
Что делать если ИС не получает токен доступа от ЕСИА | В этом случае необходимо проверить, что параметр allow_url_fopen (при необходимости, его можно поменять только в php.ini) установлен в значение ON. |
Почему в тестовой среде ЕСИА модуль авторизации работает стабильно, а при подключении к промышленному контуру авторизация выполняется некорректно? | В этом случае необходимо проверить, что на вашем сервере установлено верное время (при необходимости выполнить синхронизацию с помощью NTLM), а также проверить корректность загруженного на тех. портале сертификата (для этого нужен доступ в личный кабинет тех. портала). |
Почему при авторизации ЕСИА выдает сообщение о том, что нет записей об ИС? | В этом случае необходимо проверить корректность загруженного на тех. портале сертификата (для этого нужен доступ в личный кабинет тех. портала). Если заявка на подключение к тестовому/промышленному контуру была подана недавно, то, возможно, что ее еще не успели обработать и ИС еще не подключена к ЕСИА. При необходимости можно обратиться в ТП ЕСИА за разъяснениями. |
Почему после авторизации на портале госуслуг и последующего редиректа в ИС не происходит обработка данных, которые должна получить система от ЕСИА? | Во-первых, необходимо проверить, что на стороне ЕСИА не возникло ошибки. Обычно это видно в URL возврата или в логах тестовой ЕСИА. Во-вторых, необходимо проверить, что значение state возвращаемое ЕСИА совпадает с сохраненным, еще до авторизации на портале, значением $_SESSION[‘esia_oauth_state’]. Если значения esia_oauth_state в массиве $_SESSION нет, то необходимо проверить доступность каталога, в котором сохраняются пользовательские сессии, для записи. |
Подскажите, как выполнить произвольный php код на drupal 9? | Создать произвольный раздел, в php-файле набрать код и потом обратиться по URL этого раздела |
Какие файлы тестового сервера необходимо переписать на основном? | Вот эти: EsiaOmniAuth.php loginesia.php loginesiaexit.php SiteController.php /srv/lk/common/models/esia/EsiaOmniAuth.php /srv/lk/frontend/views/site/loginesia.php /srv/lk/frontend/views/site/loginesiaexit.php /srv/lk/frontend/controllers/SiteController.php |
При работе модуля будет использоваться расширение openssl для php или отдельная утилита openssl? | Расширение openssl для php |
Будет ли работать модуль с PHP 5.4 | Нет, 5.5 и выше |