Esia 007002 ошибка

Форум КриптоПро
 » 
Общие вопросы
 » 
Общие вопросы
 » 
ЕСИА версия 2.90, код авторизации


Offline

foke

 


#1
Оставлено
:

31 мая 2022 г. 22:02:42(UTC)

foke

Статус: Новичок

Группы: Участники

Зарегистрирован: 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
&timestamp=2022.05.31+23%3A10%3A39+%2B0400
&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Flogin%2Foauth2%2Fcode%2Fesia

Отредактировано пользователем 31 мая 2022 г. 22:15:29(UTC)
 | Причина: Не указана


Вверх


Offline

saaremaa

 


#2
Оставлено
:

6 июля 2022 г. 13:50:13(UTC)

saaremaa

Статус: Новичок

Группы: Участники

Зарегистрирован: 06.07.2022(UTC)
Сообщений: 1
Российская Федерация

У вас получилось что-нибудь с получением кода авторизации? Тоже зависли на этом моменте и не знаем куда двигаться. Поддержка Минцифры только пересылает отрывки из методички.

Дополнение от 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)
 | Причина: Не указана


Вверх


Offline

two_oceans

 


#3
Оставлено
:

8 июля 2022 г. 8:06:58(UTC)

two_oceans

Статус: Эксперт

Группы: Участники

Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,598
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 389 раз в 364 постах

Автор: 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.

Что же до указанной ссылки на библиотеку Го, похоже на несертифицированное решение с самостоятельной реализацией криптографических примитивов. Для тестов с тестовыми ключами конечно никто Вам ничего особо не скажет. Используя же несертифицированное решение с гитхаба в продакшене с «боевыми» ключами, Вы принимаете на себя риски возможных штрафов за неправильное обращение со СКЗИ и ключевой информацией. Будьте бдительны, не все работающие решения можно использовать по закону.


Вверх


Offline

forumname

 


#4
Оставлено
:

23 августа 2022 г. 9:44:46(UTC)

forumname

Статус: Новичок

Группы: Участники

Зарегистрирован: 23.08.2022(UTC)
Сообщений: 1

Автор: foke Перейти к цитате

подписать полученную строку с использованием алгоритма подписания data hash с использованием механизмов КриптоПРО CSP

Я правильно понимаю, что сначала вычисляем hash с помощью алгоритма GOST3411_2012_256, а потом подписываем вычисленное значение алгоритмом GOST3410_2012_256?

Или нужно как-то иначе использовать механизмы КриптоПро CSP?


Вверх


Offline

navrocky

 


#5
Оставлено
:

19 октября 2022 г. 13:52:15(UTC)

navrocky

Статус: Участник

Группы: Участники

Зарегистрирован: 19.10.2022(UTC)
Сообщений: 10
Российская Федерация

Сказал(а) «Спасибо»: 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)
 | Причина: Не указана


Вверх

thanks 1 пользователь поблагодарил navrocky за этот пост.

JsutUser

оставлено 11.11.2022(UTC)


Offline

EugeneNSK

 


#6
Оставлено
:

19 декабря 2022 г. 11:26:02(UTC)

EugeneNSK

Статус: Участник

Группы: Участники

Зарегистрирован: 25.11.2020(UTC)
Сообщений: 13
Российская Федерация
Откуда: NSK

Сказал(а) «Спасибо»: 2 раз

Автор: 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);


Вверх


Offline

dzibzeev

 


#7
Оставлено
:

29 марта 2023 г. 17:25:28(UTC)

dzibzeev

Статус: Новичок

Группы: Участники

Зарегистрирован: 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


Вверх

Пользователи, просматривающие эту тему

Guest

Форум КриптоПро
 » 
Общие вопросы
 » 
Общие вопросы
 » 
ЕСИА версия 2.90, код авторизации

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

Актуальную версию документа см. на сайте Министерства цифрового развития, связи и массовых коммуникаций Российской Федерации по адресу https://digital.gov.ru/ru/documents/6186/.

N

Код параметра

Описание параметра

1.

invalid_request

ESIA-007003: В запросе отсутствует обязательный параметр, запрос включает в себя неверное значение параметра или включает параметр несколько раз

2.

access_denied

ESIA-007004: Владелец ресурса или сервис авторизации отклонил запрос

3.

unauthorized_client

ESIA-007005: Система-клиент не имеет права запрашивать получение маркера доступа таким методом

4.

invalid_scope

ESIA-007006: Запрошенная область доступа (scope) указана неверно, неизвестно или сформирована некорректно

5.

server_error

ESIA-007007: Возникла неожиданная ошибка в работе сервиса авторизации, которая привела к невозможности выполнить запрос

6.

temporarily_unavailable

ESIA-007008: Сервис авторизации в настоящее время не может выполнить запрос из-за большой нагрузки или технических работ на сервере

7.

unsupported_response_type

ESIA-007009: Сервис авторизации не поддерживает получение маркера доступа этим методом

8.

invalid_client

ESIA-008010: Не удалось произвести аутентификацию системы-клиента

9.

invalid_grant

ESIA-007011: Авторизационный код или маркер обновления недействителен, просрочен, отозван или не соответствует адресу ресурса, указанному в запросе на авторизацию, или был выдан другой системе-клиенту

10.

unsupported_grant_type

ESIA-007012: Тип авторизационного кода не поддерживается сервисом авторизации

11.

invalid_scope

ESIA-007013: Запрос не содержит указания на область доступа (scope)

12.

invalid_request

ESIA-007014: Запрос не содержит обязательного параметра []

13.

invalid_request

ESIA-007015: Неверное время запроса

14.

no_grants

ESIA-007019: Отсутствует разрешение на доступ

15.

invalid_request

ESIA-007023: Указанный в запросе <redirect_uri> отсутствует среди разрешенных для информационной системы

В конструкторе в разделе «Вход через ЕСИА» включить интеграцию и указать необходимые параметры

  • Тип среды ЕСИА. Для обоих сред необходима регистрация информационной системы в Минкомсвязи
  • Мнемоника (идентификатор) информационной системы. Должна соответствовать указанной в заявлении на подключение к ЕСИА
  • Области доступа (scope). Должны соответствовать указанным в заявлении. Для правильной работы нужно указать как минимум fullname
  • Сертификат и ключ. Необходимо загрузить файл PKCS#12 (.p12 или .pfx) с сертификатом, который был указан в заявлении на подключение к ЕСИА, и соответствующим ключом
  • Пароль от файла PKCS#12

В общих настройках виртуального портала включить вход через ЕСИА.

Добавить в белые списки на APB следующие домены:

  • esia-portal1.test.gosuslugi.ru — для тестовой среды
  • esia.gosuslugi.ru — для промышленной среды
  • esia.gslb.gosuslugi.ru

Белые списки настраиваются в файле /etc/eltex-apb/hosts.json.

[{
	"permitted-ip-list": [
		"esia-portal1.test.gosuslugi.ru",
		"esia.gosuslugi.ru",
        "esia.gslb.gosuslugi.ru",
		"gosuslugi.ru"
	]
}]

Обеспечить точкам доступа возможность резолвить доменные имена. Для этого

  • Настроить DNS сервер, к которому возможен доступ из сети управления точек доступа
  • Настроить на DHCP выдачу точкам доступа адреса DNS сервера

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

Обеспечить доступ с сервера портальной авторизации на сервера ЕСИА 

Настройки на техпортале ЕСИА

В целях обеспечения дополнительной проверки подлинности запроса с 01 декабря 2020 года необходимо указывать параметр redirect_uri (ссылка, по которой должен быть направлен пользователь после аутентификации) в запросах от информационной системы в точном соответствии со ссылкой в поле «URL системы» блока основных данных на Технологическом портале ЕСИА.В случае несоответствия адреса в параметре redirect_uri и адреса, указанного на технологическом портале ЕСИА, в ответ на запрос будет возвращаеться ошибка «ESIA-007023» с текстом «Redirection URL not allowed for system». С подробной информацией о добавлении URL системы можно ознакомиться в п.3.1.1 «Добавление записи ИС» Руководства пользователя технологического портала ЕСИА (https://digital.gov.ru/ru/documents/).

На техпортале ЕСИА внесите URL http://<внутренний ip-адрес сервера>:8080/eltex_portal/esia-auth и http://redirect.loc:8888/eltex_portal/esia-auth,
которые указаны в качестве редиректа в запросах к сервису ЕСИА.

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

Pick a username
Email Address
Password

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

Понравилась статья? Поделить с друзьями:
  • Esf 45030 electrolux сброс ошибок
  • Esf 43020 коды ошибок
  • Esf 43020 electrolux ошибки
  • Eset сбой активации код ошибки act 0
  • Eset произошла ошибка при загрузке файлов обновлений