Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проблема при проверке подписи полученного маркера доступа #4

Open
matsa73 opened this issue Nov 30, 2018 · 10 comments

Comments

@matsa73
Copy link

matsa73 commented Nov 30, 2018

Доброго времени суток! Реализую авторизацию на ЕСИА с помощью этой библиотеки. Никак не могу понять почему не проходит проверка токена, который был получен следующим образом:

var tokenResponse = await esiaClient.GetOAuthTokenAsync(authCode);

Проверка осуществлялась следующим образом:

esiaClient.VerifyToken(tokenResponse.AccessToken)

Мне ЕСИА отвечает авторизационным кодом (authCode), который я использую для получения токена. Полученный TokenAccess получается невалидным. Можете подсказать в чём может быть проблема и куда мне следует смотреть.

Я полагаю, что с сертификатом должно быть всё нормально, т.к. я получил ответ от системы, а SingProvider у класса EsiaClient вторым экшеном возвращает тот же сертификат, что был установлен на машине. Пробовал дебажить процесс проверки токена и следующая функция возвращает мне false, говоря о том, что токен не валидный:

return csp.VerifyData(message, CryptoConfig.MapNameToOID("SHA256"), signature);

@xeltan
Copy link
Owner

xeltan commented Dec 7, 2018

Привет. Сложно сказать. В VerifyMessage передается alg, если оно не равно RS256, то будет false - можно проверить это значение. Иначе, думаю что проблема в сертификате. А вообще при помощи полученного токена получается получать данные из ЕСИА (без проверки сертификата)?

@matsa73
Copy link
Author

matsa73 commented Dec 10, 2018

Да, в том то и дело, что получается получить данные из ЕСИА без проверки сертификата. Я уже лез и в алгоритмы самой библиотеки, сверял их с документацией. А ЕСИА какой использует сертификат для шифрования маркера доступа? Я использую для проверки токена свой сертификат, который установлен на машине (это тот же, который был отправлен в ЕСИА с заявкой на подключение).

В VerifyMessage передается alg, если оно не равно RS256, то будет false - можно проверить это значение.

Ошибка падает именно на самой функции проверки
return csp.VerifyData(message, CryptoConfig.MapNameToOID("SHA256"), signature);
И это условие выполняется:
if ( alg.ToUpperInvariant() == "RS256" )

@xeltan
Copy link
Owner

xeltan commented Dec 10, 2018

Для проверки маркера доступа нужно использовать сертификат самой ЕСИА, а не ваш (вашей системы). Сертификат, который вы сформировали и отправили в ЕСИА - это сертификат вашей системы. Вам нужно получить от ЕСИА их сертификаты (тестовый и рабочий), установить их на машину и уже их использовать для проверки.

@matsa73
Copy link
Author

matsa73 commented Dec 11, 2018

Очень странно, т.к. кроме тех сертификатов, которые были отправлены в ЕСИА у меня нет, а люди, которые занимались регистрацией нашей системы в ЕСИА про второй сертификат ничего не говорят. Я думал, что ЕСИА всё шифрует нашим сертификатом. Буду тогда выяснять, спасибо. Как выясню отпишусь сюда.

@ingver
Copy link

ingver commented Mar 18, 2019

Привет! Столкнулся с той же проблемой. Я так понимаю, действительно нужен сертификат от ЕСИА. Но не понимаю, где его получить. Есть новая информация по вопросу?

@matsa73
Copy link
Author

matsa73 commented Mar 18, 2019

Доброго времени суток. Да, недавно появилась новая информация. Хотел попозже отписаться сюда после того как проверю этот вариант, т.к. не уверен в нём на все 100%. Поддержка ЕСИА ответила, что подпись маркера доступа осуществляется с помощью их сертификата с открытым ключом. Этот сертификат можно скачать с тестовой среды или с боевой, нажав на "информацию о браузере" в строке с URL.
1

Если с помощью этого сертификата получится проверить маркер доступа, то отпишитесь сюда, пожалуйста :-)

@ingver
Copy link

ingver commented Mar 19, 2019

@Mats666 Все завелось! Пробовал сертификат и тестовый, и рабочий. В обоих случаях, работает. Благодарю за помощь! (:

@matsa73 matsa73 closed this as completed Mar 19, 2019
@matsa73 matsa73 reopened this Jun 20, 2019
@matsa73
Copy link
Author

matsa73 commented Jun 20, 2019

@ingver доброго времени суток. Вот спустя столько времени мне довелось установить этот сертификат и добавить проверку маркера доступа. Но что-то всё равно у меня эта проверка падает с использованием этого сертификата. Можете подсказать в каком формате вы скачали сертификат (DER Encoded Binary X.509 или же Base-64 encoded X.509) и какое расширение использовали у сертификата (.cer или .crt)? Никак не могу разобраться в чём собственно дело.

@xriby
Copy link

xriby commented Oct 21, 2020

Всем здравствуйте! Также столкнулся с проблемой проверки маркера доступа ( работаю с тестовой средой, установил сертификат тестовой среды).
И также, если отключить проверку маркера, то удается получить токен и данные о пользователе.

  1. Вам удалось пройти проверку?
  2. Возможно ли использовать библиотеку в промышленной среде ЕСИА без проверки маркера?

@matsa73
Copy link
Author

matsa73 commented Oct 21, 2020

Добрый день. Нет, проверку маркера доступа осуществить так и не удалось. И да, я использую библиотеку для доступа к промышленной среде ЕСИА без этой проверки. Официальная документация по взаимодействию с ЕСИА говорит, что это необходимо, но реализовать проверку не получается. Так же общение с поддержкой ничего не прояснило в этой ситуацией. Как это выглядит с точки зрения законодательства РФ и секьюрности получения данных пользователя в таком случае уже другой вопрос.

P.S. Имейте в виду, что сейчас промышленная среда ЕСИА работает с ГОСТ сертификатами, а не с самоподписными, как было ранее.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants