Задать вопрос
@Maxim19860

Как получить код авторизации через ЕСИА?

Проблема конкретно с версией v2. v1 работает корректно но подключиться с второй версии не получается. Не можем получить первый код авторизации. Все вроде по документации, хотя она крайне кривая. Скину код на Python. Кто может подскажите. Ошибка error_description":"ESIA-007053: OAuthErrorEnum.clientSecretWrong

def sign_params_for_v2_by_csptest(client_secret_raw):
    """

    :param client_secret_raw: Сформированный для подписания файл
    :return: 
    """
    thumbprint = ""
    tmp_dir = tempfile.gettempdir()
    source_file = tempfile.NamedTemporaryFile(mode='w', delete=False, dir=tmp_dir)
    source_file.write(client_secret_raw)
    source_file.close()
    source_path = source_file.name
    destination_path = source_path + ".sig"
    cmd = (f'/opt/cprocsp/bin/amd64/csptest -keys -sign GOST12_256 -cont "имя контейнера" -keytype exchange -in {source_path} -out {destination_path}')
    os.system(cmd)
    signed_message = open(destination_path, 'rb').read()
    os.unlink(source_path)

    os.unlink(destination_path)
    """
    Возвращает base64url подписанное значение
    """
    return base64.urlsafe_b64encode(signed_message).decode('utf-8')

TIMESTAMP = get_timestamp()
CLIENT_ID = "имя"
SCOPE = "openid"
SCOPE_ORG = "org_inn"
REDIRECT_URI = "урл"
SERVICE_URL = "https://esia-portal1.test.gosuslugi.ru/aas/oauth2/v2/ac"
STATE = str(uuid.uuid4())
#Формируем client для подписания
client_secret_raw = (
    CLIENT_ID +
    SCOPE.replace(" ", "") +
    SCOPE_ORG +
    TIMESTAMP +
    STATE +
    REDIRECT_URI
)

client_secret = sign_params_for_v2_by_csptest(client_secret_raw)
client_hash = "hash через calc_cert_hash_unix"

params_url = {
    "client_id": CLIENT_ID,
    "scope": SCOPE,
    "scope_org": SCOPE_ORG,
    "timestamp": TIMESTAMP,
    "state": STATE,
    "redirect_uri": REDIRECT_URI,
    "client_secret": client_secret,
    "response_type": "code",
    "access_type": "offline",
    "client_certificate_hash": client_hash,
}

params = urlencode(sorted(params_url.items()))
url = f"{SERVICE_URL}?{params}"
print("URL:", url)
  • Вопрос задан
  • 187 просмотров
Подписаться 2 Средний 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы