Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
КриптоПро .NET ESIA-007053 clientSecretWrong
Статус: Новичок
Группы: Участники
Зарегистрирован: 10.07.2023(UTC) Сообщений: 1  Откуда: Воронеж
|
Добрый день. Занимаюсь интеграцией с ЕСИА ../v2/ac: получение авторизационого кода. Помогите пожалуйста разобраться в ошибке подписи. Редирект на url сформированный по лекалам КриптоПро .NET SDK, возвращает ошибку error_description=ESIA-007053%3A+OAuthErrorEnum.clientSecretWrong&state=0270be29-eac7-4943-ad23-f46887a60661&error=access_deniedОтвет от Федерального ситуационного центра <sd@sc.digital.gov.ru> По Вашему обращению сообщаем: ошибка возникает по причине некорректного формирования подписи запроса. Порядок формирования параметра и пример реализации описаны в разделе "В.2.5 Получение маркера доступа в обмен на авторизационный код (v3/te)" Методических рекомендаций по использованию ЕСИА (https://digital.gov.ru/ru/documents/6186/). client_certificate_hash формируется по средством команды Цитата:cpverify.exe certName.cer -mk -alg GR3411_2012_256 -inverted_halfbytes 0 Код реализации AuthRedirectUrlЦитата: public string BuildEsiaAuthPageUri() { State = Guid.NewGuid().ToString("D");
var timestamp = DateTime.UtcNow.ToString("yyyy.MM.dd HH:mm:ss +0000"); var scope = RemoveWhitespace(EsiaSettings.Scope); var msg = $"{EsiaSettings.ClientId}{scope}{timestamp}{State}{EsiaSettings.RedirectUri}";
var clientSecret = Sign(msg);
var builder = new RequestBuilder(); builder.AddParam("client_secret", clientSecret); builder.AddParam("client_id", EsiaSettings.ClientId); builder.AddParam("scope", EsiaSettings.Scope); builder.AddParam("timestamp", timestamp); builder.AddParam("state", State); builder.AddParam("redirect_uri", EsiaSettings.RedirectUri); builder.AddParam("client_certificate_hash", EsiaSettings.ClientCertificateHash); builder.AddParam("response_type", "code"); builder.AddParam("access_type", "online");
//Вот тут самый важный момент на который было потрачено множество времени. Просто заменяем символы на безопасные var url = EsiaEndpoints.EsiaAuthTestUrl + "?" + builder.ToString() .Replace("+", "%2B") .Replace(":", "%3A") .Replace(" ", "+"); return url; }
Код подписи сообщения Цитата: public string Sign(string msg) { var certificate = GetSignerCert(); var signature = SignGOST3411(certificate, Encoding.UTF8.GetBytes(msg)); return Base64UrlEncoder.Encode(signature); } private string SignGOST3411(X509Certificate2 certificate, byte[] data) { var gost3411 = new Gost3411_2012_256CryptoServiceProvider(); var hashValue = gost3411.ComputeHash(data); gost3411.Clear(); var signedHash = GostSignHash(hashValue, certificate.PrivateKey as Gost3410_2012_256CryptoServiceProvider, "Gost3411_2012_256"); return Base64UrlEncoder.Encode(signedHash); }
static byte[] GostSignHash(byte[] HashToSign, Gost3410_2012_256CryptoServiceProvider key, string HashAlg) { //Создаем форматтер подписи с закрытым ключом из переданного //функции криптопровайдера. Gost2012_256SignatureFormatter Formatter = new Gost2012_256SignatureFormatter(key);
//Устанавливаем хэш-алгоритм. Formatter.SetHashAlgorithm(HashAlg);
//Создаем подпись для HashValue и возвращаем ее. return Formatter.CreateSignature(HashToSign); }
По итогу формируется следующий urlhttps://esia-portal1.tes...e&access_type=online
|
|
|
|
Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
КриптоПро .NET ESIA-007053 clientSecretWrong
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close