ekapusta / oauth2-esia

Authenticate in ESIA and get authenticated individual personal information
MIT License
67 stars 48 forks source link

Ошибка "unauthorized_client" и реализация тестовой авторизации #7

Closed Dunwolf closed 4 years ago

Dunwolf commented 4 years ago

Здравствуйте.

Использую данный пакет для интеграции авторизации на ЕСИА через OAuth2.0. Сейчас идёт разработка на тестовом сайте. Установлены: — собственно, ekapusta/oauth2-esia; — openssl 1.1.1d (настроен на сервере; через php cli отрабатывает успешно);

Сначала попробовал ключи RSA — получил url. Пробовал использовать этот адрес — ЕСИА возвращала ошибку «unauthorized_client». Гуглил — попробовал перейти на ГОСТ ключи. Собственно, сейчас на этом остановился. PHP не читает алгоритмы ГОСТ, и запускать получается только из cli. Вариант нерабочий. Поздно дошло, что нужно специально компилить PHP под это дело.

Возможно, стоит вернуться к истокам и использовать RSA. Там хотя бы url формировался. Из методички ЕСИА не совсем понял: там сказано про поддержку ГОСТ алгоритмов, но ни слова про RSA. ЕСИА их корректно обрабатывает?

Вопросы:

  1. Можно ли вообще использовать RSA для процесса авторизации? Здесь тогда сразу возникает вопрос, что за ошибка «unauthorized_client». Может быть, вы сталкивались.
  2. Какое корректное заполнение полей в конструкторе? Из-за «unauthorized_client» для RSA (вроде работает «как-то») не могу понять, влияют ли на появление этой ошибки другие параметры или нет.
$provider = new EsiaProvider(
    [
        'clientId'      => 'TEST', // "Мненомика" в терминах ЕСИА
        'redirectUri'   => 'http://example.com/', // подставляю свой адрес, всё норм
        'defaultScopes' => 'openid',
        // Для работы с тестовой версией портала
        'remoteUrl' => 'https://esia-portal1.test.gosuslugi.ru',
        'remoteCertificatePath' => EsiaProvider::RESOURCES.'esia.test.cer',
    ],
    [
        'signer' => new OpensslPkcs7('certs/test.cer', 'certs/test.key')
        // вариант RSA
        // openssl req -x509 -outform pem -nodes -days 18250  -utf8 -subj "/C=RU/CN=Tester RSA"   -keyout ekapusta.rsa.test.key  -out ekapusta.rsa.test.cer  -newkey rsa:2048
        // вариант ГОСТ
        // openssl req -x509 -outform pem -nodes -days 18250  -utf8 -subj "/C=RU/CN=Tester GOST"  -keyout test.key -out test.cer -newkey GOST2012_512 -pkeyopt paramset:A -engine gost
    ]
);

— clientId для тестовой среды какой использовать? Уже клиента или что-то иное? — remoteCertificatePath — пока не могу понять смысл параметра. Есть в пакете два ключа для прода и теста, но для чего они? Методичку излазил, но не понял.

Словом, нужно запустить успешно тестовую авторизацию малой кровью.

garex commented 4 years ago

PHP не читает алгоритмы ГОСТ, и запускать получается только из cli. Вариант нерабочий. Вариант рабочий.

RSA для прода по-мойму нет. Читайте методичку, пытайте минкомсвязи.

clientId

Тот который у вашей системы выдан минкосвязи.

remoteCertificatePath

Это для проверки подлинности ответа сервера.

Dunwolf commented 4 years ago

Это для проверки подлинности ответа сервера.

Т.е. в remoteCertificatePath можно использовать, входящие в пакет esia.prod.cer и esia.test.cer?

Вариант рабочий.

Но ведь для этого нужно скомпилить PHP c ГОСТ алгоритмами? Или можно как-то подружить cgi с настройками cli? Есть готовое решение для этого?

garex commented 4 years ago

Т.е. в remoteCertificatePath можно использовать, входящие в пакет esia.prod.cer и esia.test.cer?

Нужно.

Но ведь для этого нужно скомпилить PHP c ГОСТ алгоритмами?

Нет. См. внимательно на тесты -- в том числе и с гостами там есть.

Dunwolf commented 4 years ago

Спасибо за помощь. Буду разбираться дальше

danaksa commented 4 years ago

А с гостовским сертификатом и ключом полученными из lissi (в связке с crypto pro) это решение будет работать?

garex commented 4 years ago

А с гостовским сертификатом и ключом полученными из lissi (в связке с crypto pro) это решение будет работать?

Ключ в каком формате?

danaksa commented 4 years ago

PEM -----BEGIN ENCRYPTED PRIVATE KEY-----


-----END ENCRYPTED PRIVATE KEY-----

garex commented 4 years ago

Должно вполне.

danaksa commented 4 years ago

Detached подпись правильная вроде, проверял загрузкой в crypto pro, хэш как у сертификата, ссылку редиректа формирует, ввожу тестовые учетные данные в есиа, возвращает вместо code ошибку ESIA-007005: Система-клиент не имеет права запрашивать получение маркера доступа таким методом. В логах ЕСИА Can't find certificate for client id [] on state [] cert thumbPrint , вот в thumbprint хэш не как у сертификата

danaksa commented 4 years ago

А вы не могли бы помочь за оплату доделать это? использовали ваш пакет как наиболее подходящий для нашей системы, но что то с подписью я так понимаю

garex commented 4 years ago

в ближайшие полгода -- нет

проблема где-то в настройках вашей системы в еста а не в подписи


Alexander Ustimenko +7 (952) 918-02-20

ср, 8 апр. 2020 г. в 17:01, reposgit notifications@github.com:

А вы не могли бы помочь за оплату доделать это? использовали ваш пакет как наиболее подходящий для нашей системы, но что то с подписью я так понимаю

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub https://github.com/ekapusta/oauth2-esia/issues/7#issuecomment-610868194, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAATBHIAEH7HW62QCLU2QB3RLRDQDANCNFSM4LCDVJ5Q .

danaksa commented 4 years ago

А на этапе получения code scope должны обязательно совпадать с зарегистрированными в заявке на подключение к ЕСИА?

Lotarevivan commented 2 years ago

Подскажите для тестовой среды используется сертификат который мы загружаем в тех портал есиа? Или это только для продуктива. Минком связь должна какие-то учетные данные предоставить? Пытаюсь для тестовой среды подписывать тем сертификатом который загрузил на тех портал получаю ESIA-007005 unauthorized_client

garex commented 2 years ago

Подскажите для тестовой среды используется сертификат который мы загружаем в тех портал есиа? Или это только для продуктива. Минком связь должна какие-то учетные данные предоставить? Пытаюсь для тестовой среды подписывать тем сертификатом который загрузил на тех портал получаю ESIA-007005 unauthorized_client

Нет. См. автотесты внимательно.

KlinDev commented 2 years ago

Detached подпись правильная вроде, проверял загрузкой в crypto pro, хэш как у сертификата, ссылку редиректа формирует, ввожу тестовые учетные данные в есиа, возвращает вместо code ошибку ESIA-007005: Система-клиент не имеет права запрашивать получение маркера доступа таким методом. В логах ЕСИА Can't find certificate for client id [] on state [] cert thumbPrint , вот в thumbprint хэш не как у сертификата

Столкнулись с идентичной ошибкой после авторизации в тестовой среде. В ИС тех портала тестовой среды указали тот-же тестовый сертификат, который используем для генерации подписи для поля client_secret, мнемоники тоже совпадают.

Подскажите, у вас получилось ее исправить и как?

garex commented 2 years ago

Я это не ресёчил. У нас на проде работает.

Скорее всего где-то не тот серт подпихивается. Или форматы ключей не те, которые openssl понимает. Можете своего подписанта на базе cli от криптопро сделать.


Alexander Ustimenko +7 (952) 918-02-20

ср, 16 мар. 2022 г. в 22:41, Klindev @.***>:

Detached подпись правильная вроде, проверял загрузкой в crypto pro, хэш как у сертификата, ссылку редиректа формирует, ввожу тестовые учетные данные в есиа, возвращает вместо code ошибку ESIA-007005: Система-клиент не имеет права запрашивать получение маркера доступа таким методом. В логах ЕСИА Can't find certificate for client id [] on state [] cert thumbPrint , вот в thumbprint хэш не как у сертификата

Столкнулись с идентичной ошибкой после авторизации в тестовой среде. В ИС тех портала тестовой среды указали тот-же тестовый сертификат, который используем для генерации подписи для поля client_secret, мнемоники тоже совпадают.

Подскажите, у вас получилось ее исправить и как?

— Reply to this email directly, view it on GitHub https://github.com/ekapusta/oauth2-esia/issues/7#issuecomment-1069272687, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAATBHIESSR4JPMBGGFJB7DVAH6L3ANCNFSM4LCDVJ5Q . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you modified the open/close state.Message ID: @.***>