Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline EgorKenk  
#1 Оставлено : 3 ноября 2023 г. 14:43:08(UTC)
EgorKenk

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

Группы: Участники
Зарегистрирован: 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-02420a7e9c03https://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)  | Причина: Не указана

Offline dp007yandex  
#2 Оставлено : 17 апреля 2024 г. 13:10:30(UTC)
dp007yandex

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

Группы: Участники
Зарегистрирован: 06.10.2016(UTC)
Сообщений: 3
Российская Федерация
Откуда: Уфа

Сказал(а) «Спасибо»: 1 раз
https://habr.com/ru/articles/793028/

Но подпись для старой версии работает, а для второй почему-то нет(

Отредактировано пользователем 17 апреля 2024 г. 16:48:44(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.