Статус: Участник
Группы: Участники
Зарегистрирован: 25.08.2023(UTC) Сообщений: 21  Откуда: Ставрополь Сказал(а) «Спасибо»: 4 раз Поблагодарили: 1 раз в 1 постах
|
Здравствуйте! Пишу сервис для авторизации через ЕСИА и Госуслуги. Использую библиотеку pycades для хеширования строки и создания отделённой подписи. И когда отправляю подписанный client_secret со всеми необходимыми параметрами в GET запросе для получения авторизационного кода на адрес https://esia-portal1.tes...lugi.ru/aas/oauth2/v2/ac, то получаю в браузере ошибку типа error_description=ESIA-007053. client_secret формирую по документации "Методические рекомендации по использованию Единой системы идентификации и аутентификации", то есть вида Цитата:TESTfullname birthdate birthplace gender snils mobile email id_doc inn2023.11.03 14:41:06 +0300e0182d78-7a3d-11ee-80fd-02420a7e9c03 https://test.ru/ (client_id и url для редиректа были заменены на test для конфиденциальности). Функция получения подписи выглядит так и она возвращает подпись в байтах: Код:def signature_data_hash(data: str, encoding="utf-8"):
"""
Метод для подписи строки с использованием алгоритма data_hash
:param data: строка, которую нужно подписать
:return: подписанная строка
"""
store = pycades.Store()
store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
certs = store.Certificates
assert (certs.Count != 0), "Certificates with private key not found"
signer = pycades.Signer()
signer.Options = pycades.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY
signer.Certificate = certs.Item(1)
print(signer.Certificate.SubjectName)
signer.CheckCertificate = False
hashedData = pycades.HashedData()
hashedData.DataEncoding = pycades.CADESCOM_BASE64_TO_BINARY
if isinstance(data, str):
data = bytes(data.encode(encoding))
hashedData.Algorithm = pycades.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
hashedData.Hash(base64.b64encode(data).decode())
signedData = pycades.SignedData()
signature = signedData.SignHash(hashedData, signer, pycades.CADESCOM_CADES_BES, pycades.CAPICOM_ENCODE_BINARY)
return signature
Функция получения client_secret выглядит так: Код:def create_client_secret_code(
client_id: str,
scope: str,
scope_org: str,
state: str,
redirect_uri: str
):
"""
Метод для создания параметра client secret
:param client_id:
:param scope:
:param scope_org:
:param state:
:param redirect_uri:
:return: client secret
"""
timestamp = get_timestamp()
client_secret_str = client_id + scope + scope_org + timestamp + state + redirect_uri
client_secret_bytes = signature_data_hash(client_secret_str)
reversed_client_secret_bytes = client_secret_bytes[::-1]
client_secret = base64.urlsafe_b64encode(reversed_client_secret_bytes).decode()
return client_secret
Подскажите, пожалуйста, что может быть не так? Отредактировано пользователем 3 ноября 2023 г. 14:52:18(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.10.2016(UTC) Сообщений: 3  Откуда: Уфа Сказал(а) «Спасибо»: 1 раз
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close