Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
ЕСИА версия 2.90, код авторизации
Статус: Новичок
Группы: Участники
Зарегистрирован: 31.05.2022(UTC) Сообщений: 1
|
Здравствуйте. В версии ЕСИА 2.90 депрекейтнули эндпоинт для получения кода авторизации /aas/oauth2/ac. Новая версия: /aas/oauth2/v2/ac. Изменилось описание формирования параметра client_secret. До версии 2.90: Цитата:<client_secret> – подпись запроса в формате PKCS#7 detached signature в кодировке UTF- 8 от значений четырех параметров HTTP–запроса: scope, timestamp, clientId, state (без разделителей). <client_secret> должен быть закодирован в формате base64 url safe Версия 2.90: Цитата:<client_secret> - подпись значений пяти параметров в кодировке UTF-8: client_id, scope, timestamp, state, redirect_uri. конкатенировать вышеуказанные параметры; подписать полученную строку с использованием алгоритма подписания data hash с использованием механизмов КриптоПРО CSP и сертификата информационной системы; закодировать полученное значение в URL Safe Base64. В версии <2.90 с "подпись запроса в формате PKCS#7 detached signature" разобрались, работает. В версии 2.90 неясно, что такое "подписать полученную строку с использованием алгоритма подписания data hash с использованием механизмов КриптоПРО CSP"? Формулировка весьма расплывчатая, на мой взгляд. Должен ли измениться код формирования подписи? "data hash" - это название алгоритма? Есть ли рабочий java-код под эту задачу? Использование прежнего java-кода формирования подписи параметра client_secret (с учётом прочих обновлений параметров, описанных в инструкции) приводит к ошибке "ESIA-007005: The client is not authorized to request an access token using this method.", что по моему опыту соответствует некорректно сформированному client_secret. На данный момент сгенерированный url получения кода авторизации выглядит следующим образом: Цитата:https://esia-portal1.test.gosuslugi.ru/aas/oauth2/v2/ac ?client_id=MY-SYSTEM &client_certificate_hash=последовательность-64-символа &scope=fullname%20gender%20birthdate%20birthplace%20birth_cert_doc%20contacts%20inn%20snils%20residence_doc%20temporary_residence_doc%20id_doc%20temporary_residence_doc &response_type=code &access_type=offline &client_secret=последовательность-4-тысячи-символов &state=265133f8-0aaf-4c7a-89e2-b50fc6e0318a ×tamp=2022.05.31+23%3A10%3A39+%2B0400 &redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Flogin%2Foauth2%2Fcode%2Fesia Отредактировано пользователем 31 мая 2022 г. 22:15:29(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.07.2022(UTC) Сообщений: 6 
|
У вас получилось что-нибудь с получением кода авторизации? Тоже зависли на этом моменте и не знаем куда двигаться. Поддержка Минцифры только пересылает отрывки из методички. Дополнение от 07.07.2022: Цитата: К Вашему запросу SCR#2946679 добавлен комментарий:
Добрый день!
По Вашему обращению сообщаем, что при формировании client_secret необходимо использовать следующие алгоритмы шифрования: GOST3411_2012_256withGOST3410_2012_256; GOST3411_2012_512withGOST3410_2012_512: GOST3411withGOST3410EL .
Кто добавил: СКУФ Служебный/ПУБЛИЧНОЕ АКЦИОНЕРНОЕ ОБЩЕСТВО "РОСТЕЛЕКОМ"
после формирования подписи с помощью GOST3411_2012_256withGOST3410_2012_256 получили корректный client_secret Библиотеки на языке Golang: https://github.com/Theo730/gogostОписание: http://www.gogost.cypherpunks.ru/Отредактировано пользователем 7 июля 2022 г. 13:01:22(UTC)
| Причина: Не указана
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 395 раз в 366 постах
|
Автор: saaremaa  По Вашему обращению сообщаем, что при формировании client_secret необходимо использовать следующие алгоритмы шифрования: GOST3411_2012_256withGOST3410_2012_256; GOST3411_2012_512withGOST3410_2012_512: GOST3411withGOST3410EL . Добрый день. Сначала конечно замечание, что не шифрования, а подписания, так как в сообщениях выше процитированы места, где ясно говорится "подпись", "подписать". 1) Если перевести идентификаторы на человекопонятный язык, то это ГОСТ-2012 (256 и 512 бит), ГОСТ-2001. Насчет актуальности последнего весьма сомнительно, так как сертификаты гост-2001 уже должны были все закончиться. Для вышеуказанных идентификаторов нужно на подписание передавать сами данные, а не вычисленный заранее хэш. 2) Если речь про PKCS#7, то там нет проблемы с порядком байтов, все определено в стандарте. Если же речь про RawSignature, то стандарт не определяет порядок байт, может понадобится "переворачивать/отзеркалить" значение хэша и/или подписи (первый байт с последним, второй с предпоследним и т.д) до кодирования BASE64, так как указанные идентификаторы без слова "CryptoPro", что подразумевает порядок байт Big Endian. Обычно достаточно перевернуть значение подписи. В то же время есть идентификаторы гост-2012 со словом "CryptoPro", которые подразумевает порядок байт Little Endian - то есть переворотов не нужно. 3) Важно также не забывать, что URL Safe Base64 не то же самое, что BASE64, нужно заменить ряд символов, имеющих специальное значение в URL. Что же до указанной ссылки на библиотеку Го, похоже на несертифицированное решение с самостоятельной реализацией криптографических примитивов. Для тестов с тестовыми ключами конечно никто Вам ничего особо не скажет. Используя же несертифицированное решение с гитхаба в продакшене с "боевыми" ключами, Вы принимаете на себя риски возможных штрафов за неправильное обращение со СКЗИ и ключевой информацией. Будьте бдительны, не все работающие решения можно использовать по закону.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 23.08.2022(UTC) Сообщений: 1
|
Автор: foke  подписать полученную строку с использованием алгоритма подписания data hash с использованием механизмов КриптоПРО CSP Я правильно понимаю, что сначала вычисляем hash с помощью алгоритма GOST3411_2012_256, а потом подписываем вычисленное значение алгоритмом GOST3410_2012_256? Или нужно как-то иначе использовать механизмы КриптоПро CSP?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 19.10.2022(UTC) Сообщений: 22  Сказал(а) «Спасибо»: 2 раз Поблагодарили: 2 раз в 2 постах
|
Вот рабочий код на Java для формирования client_secret с использованием крипто-провайдера BouncyCastle: Код:PrivateKey privateKey = ...;
String joinedString = String.join("", clientId, scope, timeStamp, state, redirectUri);
Signature signer = Signature.getInstance("GOST3411WITHECGOST3410-2012-256", new BouncyCastleProvider());
signer.initSign(privateKey);
signer.update(joinedString.getBytes());
signature = signer.sign();
String clientSecret = Base64.getUrlEncoder().encodeToString(signature);
Отредактировано пользователем 19 октября 2022 г. 13:53:54(UTC)
| Причина: Не указана
|
 1 пользователь поблагодарил navrocky за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 25.11.2020(UTC) Сообщений: 14  Откуда: NSK Сказал(а) «Спасибо»: 3 раз
|
Автор: navrocky  Вот рабочий код на Java для формирования client_secret с использованием крипто-провайдера BouncyCastle: Код:PrivateKey privateKey = ...;
String joinedString = String.join("", clientId, scope, timeStamp, state, redirectUri);
Signature signer = Signature.getInstance("GOST3411WITHECGOST3410-2012-256", new BouncyCastleProvider());
signer.initSign(privateKey);
signer.update(joinedString.getBytes());
signature = signer.sign();
String clientSecret = Base64.getUrlEncoder().encodeToString(signature);
Тоже столкнулся с проблемой формирования client_secret при получении кода доступа (через v2/ac). Подпись действительно стала сырой. Приведенный выше код рабочий. Для JCP/JCSP использую: Код:String joinedString = String.join("", clientId, scope, timeStamp, state, redirectUri);
AlgorithmDetails algorithmDetails = new AlgorithmDetails(privateKey.getAlgorithm());
Signature signature = Signature.getInstance(algorithmDetails.getSignAlgorithm(), provider);
signature.initSign(privateKey);
signature.update(joinedString.getBytes());
byte[] result = signature.sign();
String clientSecret = new String(Base64.getUrlEncoder().encode(result), StandardCharsets.UTF_8);
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 28.03.2023(UTC) Сообщений: 1 
|
Коллеги!
А у кого-нибудь получилось с использованием cryptcp -signf подписать секрет клиента для второй версии API(v2/ac) ЕСИА?
Вот так мы сейчас создаем подпись для ЕСИА(код на go):
command := exec.Command(s.cmd, "-signf", "-der", "-strict", "-cert", "-hashalg", s.hashAlgOID, "-detached", "-thumbprint", s.thumbprint, "-pin", s.containerPIN, filename)
С первой версией все прекрасно работает, с v2 не хочет работать. ЕСИА возвращает ошибку ESIA-007053: OAuthErrorEnum.clientSecretWrong
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.06.2023(UTC) Сообщений: 1  Поблагодарили: 1 раз в 1 постах
|
Находите имя своего ключа: csptest -keys -enum_cont -verifycontext -fqcn Подписываете строку: csptest -keys -cont '\\.\<хранилище>\<имя _контейнера>' -sign GOST12_256 -in файл_с_данными -out файл_с_данными.sig -keytype exchange Прочитываете файл в бинарном виде и побайтово его переворачиваете. Например: Исходные данные: 68 65 6c 6c 6f Перевернутые данные: 6f 6c 6c 65 68 Перевернутые данные кодируете в base64url - это и есть client_secret
|
 1 пользователь поблагодарил MESHOK за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.07.2022(UTC) Сообщений: 6 
|
Коллеги, поделитесь решением. Как подписать через КриптоПро строку client_secret для получения авторизационного кода через https://esia-portal1.tes...lugi.ru/aas/oauth2/v2/ac ??? По возможности примерами к командной строке. Если есть кусок кода на Golang - это просто будет чудесно. Все что выше перепробовали - получаем ошибку ESIA-007053. При этом самописное решение работает, но использовать его нельзя в боевой системе.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,504   Сказал «Спасибо»: 554 раз Поблагодарили: 2250 раз в 1756 постах
|
Автор: saaremaa  Коллеги, поделитесь решением. Как подписать через КриптоПро строку client_secret для получения авторизационного кода через https://esia-portal1.tes...lugi.ru/aas/oauth2/v2/ac ??? По возможности примерами к командной строке. Если есть кусок кода на Golang - это просто будет чудесно. Все что выше перепробовали - получаем ошибку ESIA-007053. При этом самописное решение работает, но использовать его нельзя в боевой системе. а этот ответ с примером команды уже проверили? |
|
|
|
|
Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
ЕСИА версия 2.90, код авторизации
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close