Ошибка при получении от есиа маркера доступа


Offline

Andrey_V_Pestov

 


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

19 мая 2020 г. 18:24:01(UTC)

Andrey_V_Pestov

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

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

Зарегистрирован: 19.05.2020(UTC)
Сообщений: 5
Мужчина
Российская Федерация

Добрый день.
Получаю ошибку javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure при попытке получения маркера доступа после получения авторизационного кода.
Код получения запроса токена

Код:

System.setProperty("ru.CryptoPro.defaultSSLProv", JCSP.PROVIDER_NAME);
        System.setProperty("javax.net.ssl.trustStoreProvider", JCSP.PROVIDER_NAME);
        System.setProperty("javax.net.ssl.keyStoreType", JCSP.HD_STORE_NAME);
        System.setProperty("javax.net.ssl.keyStorePassword", KEYSTORE_PASSWORD);
        System.setProperty("javax.net.ssl.trustStoreType", JCSP.HD_STORE_NAME);
        System.setProperty("javax.net.ssl.trustStore",
                "C:\trust\trust.store");
        System.setProperty("javax.net.ssl.trustStorePassword", KEYSTORE_PASSWORD);
        System.setProperty("com.sun.security.enableCRLDP", "true");
        System.setProperty("com.ibm.security.enableCRLDP", "true");

          try {
            SSLSocketFactory factory = TLSContext.initClientSSL(null,
                    "C:\trust\trust.store", KEYSTORE_PASSWORD, null);
            HttpsURLConnection.setDefaultSSLSocketFactory(factory);
        } catch (Exception e) {
            e.printStackTrace();
        }


        String timestamp = getTimestamp();
        OAuthClientRequest oAuthClientRequest = OAuthClientRequest.tokenLocation("https://esia-portal1.test.gosuslugi.ru/aas/oauth2/te")
                .setClientId(OPTIONS_CLIENT_ID)
                .setCode(optionsCode)
                .setGrantType(grantType)
                .setClientSecret(generateClientSecret(scope, timestamp))
                .setParameter("state", optionsState)
                .setRedirectURI(URI_REDIRECT)
                .setScope(scope)
                .setParameter("timestamp", timestamp)
                .setParameter("token_type", "Bearer")
                .setParameter("access_type", OPTIONS_ACCESS_TYPE_OFFLINE)
                .buildBodyMessage();
        OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient());
        return oAuthClient.accessToken(oAuthClientRequest, OAuth.HttpMethod.POST, OAuthJSONAccessTokenResponse.class);

Код формирования подписи:

Код:


   private byte[] sign(String str) throws Exception {
        KeyStore keyStore = KeyStore.getInstance(JCSP.HD_STORE_NAME,
                JCSP.PROVIDER_NAME);
        keyStore.load(null, null);

        PrivateKey key = (PrivateKey) keyStore.getKey(KEY_ALIAS, KEYSTORE_PASSWORD.toCharArray());
        Signature signature = Signature.getInstance(JCP.GOST_SIGN_2012_512_NAME);
        signature.initSign(key);
        byte[] data = str.getBytes();
        signature.update(data);
        X509Certificate certificate = (X509Certificate) keyStore.getCertificate(KEY_ALIAS);
        return CMSSign.createHashCMSEx(data, false, new PrivateKey[]{key}, new Certificate[]{certificate}, null,
                true, false, CMStools.DIGEST_OID_2012_512, CMStools.SIGN_OID_2012_512,
                CMStools.DIGEST_ALG_NAME_2012_512, JCP.GOST_SIGN_2012_512_NAME, JCSP.PROVIDER_NAME);
    }

Хранилище сертификатов:
UserPostedImage
Информация о ключе:
UserPostedImage

Кто-нибудь может подсказать, что делать в такой ситуации или что я делаю не так?

Отредактировано пользователем 27 мая 2020 г. 12:20:37(UTC)
 | Причина: Не указана


Вверх


Offline

Санчир Момолдаев

 


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

28 мая 2020 г. 9:28:25(UTC)

Санчир Момолдаев

Статус: Сотрудник

Группы: Модератор, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,025
Российская Федерация

Сказал(а) «Спасибо»: 86 раз
Поблагодарили: 215 раз в 207 постах

Добрый день!
Соберите логи

https://support.cryptopr…nlirovnija-kriptopro-jcp

https://support.cryptopr…lirovnija-kriptopro-jtls

Установите SSLLogger уровня ALL

Отредактировано пользователем 28 мая 2020 г. 10:10:58(UTC)
 | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний


Вверх


Offline

Andrey_V_Pestov

 


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

28 мая 2020 г. 12:36:48(UTC)

Andrey_V_Pestov

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

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

Зарегистрирован: 19.05.2020(UTC)
Сообщений: 5
Мужчина
Российская Федерация

Прикладываю логи
esia.log (12kb) загружен 5 раз(а).


Вверх


Offline

Евгений Афанасьев

 


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

28 мая 2020 г. 13:57:41(UTC)

Евгений Афанасьев

Статус: Сотрудник

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

Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,787
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 656 раз в 619 постах

Здравствуйте.
Лог, возможно, настроен не до конца или не верно — мало данных.
Предлагаемые шаги:
1)

Код:


System.setProperty("javax.net.ssl.trustStoreProvider", JCSP.PROVIDER_NAME); <--
System.setProperty("javax.net.ssl.keyStoreType", JCSP.HD_STORE_NAME);
System.setProperty("javax.net.ssl.keyStorePassword", KEYSTORE_PASSWORD);
System.setProperty("javax.net.ssl.trustStoreType", JCSP.HD_STORE_NAME); <--
System.setProperty("javax.net.ssl.trustStore", "C:\trust\trust.store");
System.setProperty("javax.net.ssl.trustStorePassword", KEYSTORE_PASSWORD);
System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");

trustStoreProvider со значением JCSP.PROVIDER_NAME рекомендуем изменить на JCP.PROVIDER_NAME
trustStoreType со значением JCSP.HD_STORE_NAME рекомендуем изменить на JCP.CERT_STORE_NAME (исходим из предположения, что trust.store имеет тип CertStore).
2)
использовать новую сборку https://www.cryptopro.ru…p/java-csp-5.0.40714.zip если используете java 7-8, Java CSP требует установки в java.
Или (рекомендовано!) использовать новую сборку https://www.cryptopro.ru…java-csp-5.0.40621-A.zip если используете java 10+, Java CSP НЕ требует установки в java, но есть особенности:
2.1) нужно добавить провайдеры программно (см. рук-во разработчика и администратора безопасности):
Security.addProvider(new JCSP()); // он первый, т.к. вы используете JCSP в коде
Security.addProvider(new JCP());
Security.addProvider(new RevCheck());
Security.addProvider(new Provider()); // это JTLS-провайдер
2.2) лицензия в ходе использования будет установлена и читаться под тем пользователем, под которым работает приложение (в случае версии Java CSP 5.0 для java 7-8 лицензия ставилась под администратором).
Обновление рекомендовано, т.к. были исправления для Spring.

Отредактировано пользователем 29 мая 2020 г. 9:27:08(UTC)
 | Причина: Не указана

Тех. поддержка
База знаний
Логирование JCP
Логирование JTLS
Тест JCP и сбор диаг. информации
Скачать JCP, JCSP и JTLS
Скачать Android CSP + SDK


Вверх


Offline

Andrey_V_Pestov

 


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

29 мая 2020 г. 13:54:22(UTC)

Andrey_V_Pestov

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

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

Зарегистрирован: 19.05.2020(UTC)
Сообщений: 5
Мужчина
Российская Федерация

logs2.log (75kb) загружен 3 раз(а).
1. Заменил
2. Использую новую сборку. JDK14
3. Провайдеры добавил


Вверх


Offline

Евгений Афанасьев

 


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

29 мая 2020 г. 17:15:38(UTC)

Евгений Афанасьев

Статус: Сотрудник

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

Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,787
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 656 раз в 619 постах

Судя по тому, что соединение отвалилось сразу после client hello, сервер (адрес/порт) не поддерживает ГОСТ.

Тех. поддержка
База знаний
Логирование JCP
Логирование JTLS
Тест JCP и сбор диаг. информации
Скачать JCP, JCSP и JTLS
Скачать Android CSP + SDK


Вверх


Offline

Andrey_V_Pestov

 


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

29 мая 2020 г. 17:25:38(UTC)

Andrey_V_Pestov

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

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

Зарегистрирован: 19.05.2020(UTC)
Сообщений: 5
Мужчина
Российская Федерация

И что надо делать?


Вверх


Offline

Евгений Афанасьев

 


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

29 мая 2020 г. 18:00:03(UTC)

Евгений Афанасьев

Статус: Сотрудник

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

Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,787
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 656 раз в 619 постах

Переход по ссылке https://esia-portal1.test.gosuslugi.ru/ в IE показал сертификат сервера с ключом RSA, запрос csptest к https://esia-portal1.tes…suslugi.ru/aas/oauth2/te без -proto и с -proto 6 (TLS v. 1.2) тоже дал иностранные cipher suite.
Уточните у администратора сервера, как и куда подключиться (хост, порт, TLS протокол), чтобы использовать ГОСТ.

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

Тех. поддержка
База знаний
Логирование JCP
Логирование JTLS
Тест JCP и сбор диаг. информации
Скачать JCP, JCSP и JTLS
Скачать Android CSP + SDK


Вверх


Offline

Andrey_V_Pestov

 


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

29 мая 2020 г. 18:09:05(UTC)

Andrey_V_Pestov

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

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

Зарегистрирован: 19.05.2020(UTC)
Сообщений: 5
Мужчина
Российская Федерация

Евгений, я правильно понимаю, что ЕСИА-ТЕСТ не умеет в ГОСТ?


Вверх

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

Guest

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

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

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

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

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

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

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

Доброго времени суток! Реализую авторизацию на ЕСИА с помощью этой библиотеки. Никак не могу понять почему не проходит проверка токена, который был получен следующим образом:

var tokenResponse = await esiaClient.GetOAuthTokenAsync(authCode);

Проверка осуществлялась следующим образом:

esiaClient.VerifyToken(tokenResponse.AccessToken)

Мне ЕСИА отвечает авторизационным кодом (authCode), который я использую для получения токена. Полученный TokenAccess получается невалидным. Можете подсказать в чём может быть проблема и куда мне следует смотреть.

Я полагаю, что с сертификатом должно быть всё нормально, т.к. я получил ответ от системы, а SingProvider у класса EsiaClient вторым экшеном возвращает тот же сертификат, что был установлен на машине. Пробовал дебажить процесс проверки токена и следующая функция возвращает мне false, говоря о том, что токен не валидный:

return csp.VerifyData(message, CryptoConfig.MapNameToOID("SHA256"), signature);

Актуальную версию документа см. на сайте Министерства цифрового развития, связи и массовых коммуникаций Российской Федерации по адресу 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> отсутствует среди разрешенных для информационной системы

Привет. Помогите пожалуйста с получением маркера доступа к данным есиа. Авторизационный код получил. Нужно сделать post запрос на тестовую среду для получения токеда доступа. Вот мой код:

public void getNewToken(String code, String state, String scope, Token token, boolean byRefresh)
        throws OAuthSystemException, OAuthProblemException, JsonException {
    if (state.equals(this.state.getStateAuthorize())) {
        String timestamp = timestampUtil.generateTimestamp();
        String clientSecret = certificateUtil.getUrlSafeSign(
                scope + timestamp +
                        rpguConfig.getClientID() + this.state.generateStateToken()
        );
        GrantType grantType;
        if (byRefresh) {
            grantType = GrantType.REFRESH_TOKEN;
        } else {
            grantType = GrantType.AUTHORIZATION_CODE;
        }
        OAuthClientRequest requestToEsia = OAuthClientRequest
                .tokenLocation(esiaConfig.getEsiaTokenPoint())
                .setClientId(rpguConfig.getClientID())
                .setRedirectURI(rpguConfig.getRedirectUrl())
                .setScope(scope)
                .setCode(code)
                .setGrantType(grantType)
                .setClientSecret(clientSecret)
                .setParameter("state", this.state.getStateToken())
                .setParameter("token_type", rpguConfig.getTokenType())
                .setParameter("timestamp", timestamp)
                .setParameter("access_type", rpguConfig.getAccessType())
                .buildBodyMessage();

        OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient());

        //OAuthAccessTokenResponse response = oAuthClient.accessToken(requestToEsia);

        OAuthJSONAccessTokenResponse oauthResponse = oAuthClient.accessToken
                (requestToEsia, OAuth.HttpMethod.POST, OAuthJSONAccessTokenResponse.class);



        if (!inspectorToken.checkToken(oauthResponse.getAccessToken())) {
            parserTokenData.parseTokenData(oauthResponse, token); //парсим данные токена
        }
    }
}

Но при выполнении метода по получению токена — oAuthClient.accessToken выбрасывает ошибку такую:

 org.apache.oltu.oauth2.common.exception.OAuthSystemException: java.net.ConnectException: Connection timed out: connect
at org.apache.oltu.oauth2.client.URLConnectionClient.execute(URLConnectionClient.java:108)
at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:65)
at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:55)
at org.apache.oltu.oauth2.client.OAuthClient.accessToken(OAuthClient.java:71)
at controller.server.esia.AuthorizationServer.getNewToken(AuthorizationServer.java:140)
at service.token.TokenService.getNewTokenByScope(TokenService.java:48)
at web.controller.EsiaController.getAccessCode(EsiaController.java:78)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748) ....

Если пройти по трейсу и посмотреть вглубь всех вызывающих методов то ошибка вываливается при конекте(получение стрима) объекта HttpСlient. В документации сказано что нужно отправлять запросы на: https://esia-portal1.test.gosuslugi.ru/aas/oauth2/te

В чем может быть ошибка? Почему к нему нет доступа?

Получение данных об организациях возможно только при использовании offline-режима получения данных о пользователе. Этот процесс включает следующие шаги:

1. Проведение аутентификации пользователя с помощью offline-режима, по результатам которого у вызывающей системы будет следующая информация:

  • идентификатор (oid) организации, по которой необходимо получить детальную информацию. Для получения oid можно воспользоваться блоком о ролях пользователя (roles), который доступен при наличии разрешения «Просмотр списка организаций пользователя» (usr_org);
  • актуальное значение ключа доступа «scsToken».

2. Вызов специального сервиса ESIA-Bridge, позволяющего получить данные об организации. Для этого необходимо выполнить HTTP-запрос методом POST на адрес точки получения данных об организации (/blitz/bridge/organization). Особенности запроса:

  • в теле (body) запроса необходимо указать параметры “token” (значение актуального ключа доступа), “oid” (идентификатор организации) и “redirect_url” (адрес обработчика успешной аутентификации на стороне вызывающей системы);
  • в заголовке (http header) необходимо указать параметр “Content-Type” со значением “application/x-www-form-urlencoded”.

Пример запроса на получение данных об организации:

POST https://esia.client.testcase.ru/blitz/bridge/organization
Content-Type: application/x-www-form-urlencoded
token=MIrS8LUZNHHh-8gBjzoBbHaI5qvsCIF3I3qDjh7mOMif5L90z2SAYYO9UN2talPmqiavxzjfE5CpAhV4S2t_kWyV6UHqskUIIT1B-EFFJmLAYEYnUbuD60ehbydOJVYsGmrjvaLzSwY6oqI3GKxgZaROq-9qwafgw5bgSdjCI18NU_QJHr2oRzumxwTEbLO5QKeQNekSVZeM_71q8t7l8Lh8PonOFl9Kiz2__00HT73QKIi_alE6qdzytPeS0tv68bcRdiUU2w6pzW6oIyQ6EJgpdn6zj3ff2dPiJ9pJE0oOVqcgzQHdq7_1UezpFw9qoQPEJSpAGrIH5ewhG8__k8mtz_EASApmjK20stkBdqeyFS9s21unHDmlvd13yh7Fk0ijm0vWl_iNAeCai-H_tozj7YH65L8eXqiq5sdkl2HmQHiEPOwWsmS1JivjgdqGHiaqVEiu5oXT_fEm6hrFj7nsxeedDVUGJ14FBYGgGU_Sgpf5ql2rHrJyz9hVr3MR|MTQxODMxMjc2Mg|U0gxQVMxMjhDQkM|6dkboBYuF4Y7ZtlHztSkjg|4n9D_efCPLv3fFl_JLTz5YgENWc&oid=1000323157&redirect_url=http://localhost:9000/ofCb

Возможные варианты ответа ESIA-Bridge на такой запрос:

  • если ключ доступа не позволяет получить данные указанной организации, то в ответе содержится ссылка (link) с запросом для получения корректного ключа доступа. Пример ответа:
{
  “redirect” : {
     “link” : “/blitz/bridge/entrance?redirect_url=http://localhost:9000/ofCb&oids=1000323157&mode=offline&state=dfa6e47e-576b-460e-9476-ce9597415188“,
     “state” : “dfa6e47e-576b-460e-9476-ce9597415188"
  }
}

Все, что требуется системе, – направить браузер пользователя по ссылке из ответа, указав корректный hostname ESIA-Bridge. Переход по этой ссылке инициирует в ЕСИА получение разрешения на доступ к данной организации. После того, как пользователь даст разрешение, ESIA-Bridge вернет пользователя по адресу, указанному в redirect_url и поставит новую сессионную cookie с новым ключом доступа tokenSCS. Получив обновленный ключ доступа, система должна повторно вызвать сервис получения данных об организации.

  • если ключ доступа позволяет получить данные указанной организации, то в ответе будет получен json со следующими данными:
    • обновленный ключ доступа scsToken, при этом старый ключ перестает действовать;
    • сведения об организации согласно спецификациям ЕСИА.

    Пример ответа, содержащего в себе данные организации, ее сотрудников и филиалов:

    {
      "orgResponse": {
        "scsToken": "esMNcjW0qPQ51zcTMiI8w881PiaMUfHBdNGjLo0-V2Tu8U8NGbP86tVxDXeoPQIOyjiQwz2K4ml0ymIqajcvmxoEpOc7IVs-sux0QKS4GKWxAUFBhcB-odAZJVTS_Sl0oZB8Xn5rKJh2p3zS92v-JbMVWzwL0OS6LB58If0vLIu1gdgwqKq1ee7B7vSsc8te|MTUxMzk4MzQ5MA|U0gxQVMxMjhDQkM|ls9NJJklcIDvAtQr_DgZ0w|_7qL6n1KC_M5da77ohg03FRAxwQ",
        "organization": {
          "stateFacts": [
            "Identifiable"
          ],
          "eTag": "8DF580E06129CA1190B283E6764D68ADD88CBDB9",
          "oid": 1000323157,
          "shortName": "ООО "РЕАК СОФТ"",
          "fullName": "ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "РЕАК СОФТ"",
          "type": "AGENCY",
          "ogrn": "1147746651733",
          "inn": "7715434658",
          "leg": "12200",
          "kpp": "771501001",
          "agencyTerRange": "00",
          "agencyType": "10.FED",
          "oktmo": "45359000",
          "contacts": {
            "stateFacts": [
              "hasSize"
            ],
            "size": 3,
            "eTag": "711FD22A0ADEA3FB05BEB780FF6E2B25F9BF39A1",
            "elements": [
              {
                "stateFacts": [
                  "Identifiable"
                ],
                "eTag": "326468E0BC693CE48B87646B758EE54FB0737010",
                "id": 14283140,
                "type": "OFX",
                "vrfStu": "NOT_VERIFIED",
                "value": "+7(342)2875843"
              },
              {
                "stateFacts": [
                  "Identifiable"
                ],
                "eTag": "3288F9165AD8A0C2D956DB8CA9B3799BD7CECE18",
                "id": 14283139,
                "type": "OPH",
                "vrfStu": "NOT_VERIFIED",
                "value": "+7(342)2409435*984398"
              },
              {
                "stateFacts": [
                  "Identifiable"
                ],
                "eTag": "BA3D328687D1538B7AFF0CC153E704738BC78253",
                "id": 14240474,
                "type": "OEM",
                "vrfStu": "NOT_VERIFIED",
                "value": "mvanin@reaxoft.ru"
              }
            ]
          },
          "addresses": {
            "stateFacts": [
              "hasSize"
            ],
            "size": 2,
            "eTag": "7B82EB88BCA0425E2BC3B6914AFC6F9D0702DF3B",
            "elements": [
              {
                "stateFacts": [
                  "Identifiable"
                ],
                "eTag": "5E2BA4DB9268FED5079B2F5B5463E9FFE3CC4E50",
                "id": 27443,
                "type": "OPS",
                "region": "Пермский",
                "city": "Пермь",
                "addressStr": "Пермский край, Пермь город, Комсомольский проспект",
                "countryId": "RUS",
                "zipCode": "614000",
                "street": "Комсомольский",
                "house": "31В",
                "flat": "37"
              },
              {
                "stateFacts": [
                  "Identifiable"
                ],
                "eTag": "8CA439D7A477D899C0E67E513B2B72C4B4F962E3",
                "id": 16378,
                "type": "OLG",
                "region": "г МОСКВА",
                "addressStr": "г МОСКВА,ул РИМСКОГО ",
                "countryId": "RUS",
                "zipCode": "127566",
                "street": "ул РИМСКОГО ",
                "house": "95",
                "flat": "36"
              }
            ]
          },
          "employees": {
            "stateFacts": [
              "LastPage",
              "FirstPage",
              "Paginated"
            ],
            "pageSize": 100,
            "pageIndex": 1,
            "elements": [
              {
                "stateFacts": [
                  "EntityRoot"
                ],
                "eTag": "E7ECC603BCEC866C6ACD0738A077CA39BADA9EFA",
                "prnOid": 1000299331,
                "orgOid": 1000323157,
                "position": "Руководитель",
                "chief": true,
                "person": {
                  "stateFacts": [
                    "EntityRoot"
                  ],
                  "eTag": "5B64DACFE84502F3B4A73F66A3F4D07F23360ACB",
                  "firstName": "Михаил",
                  "lastName": "Юрьев",
                  "middleName": "Владимирович",
                  "birthDate": "13.11.1981",
                  "gender": "M",
                  "citizenship": "RUS",
                  "snils": "123-456-789 58",
                  "inn": "123456789012",
                  "updatedOn": 1492174836,
                  "status": "REGISTERED",
                  "verifying": false,
                  "rIdDoc": 3303
                },
                "blocked": false
              },
              {
                "stateFacts": [
                  "EntityRoot"
                ],
                "eTag": "D90F86B8FAE7DB8567D3679D97309AF821D5025D",
                "prnOid": 1000323269,
                "orgOid": 1000323157,
                "chief": false,
                "person": {
                  "stateFacts": [
                    "EntityRoot"
                  ],
                  "eTag": "CBB725A26583BBD55980751FAE85FAD2BC828833",
                  "firstName": "Петр",
                  "lastName": "Петров",
                  "middleName": "Петрович",
                  "birthDate": "11.11.1981",
                  "birthPlace": "Москва",
                  "gender": "M",
                  "citizenship": "RUS",
                  "snils": "000-333-444 39",
                  "updatedOn": 1513856314,
                  "status": "REGISTERED",
                  "verifying": false
                },
                "blocked": false
              },
              {
                "stateFacts": [
                  "EntityRoot"
                ],
                "eTag": "48C5A569574766A15287584DC057897BF20B9BF5",
                "prnOid": 1000348301,
                "orgOid": 1000323157,
                "chief": false,
                "person": {
                  "stateFacts": [
                    "EntityRoot"
                  ],
                  "eTag": "3A4A8EA83413C3076B34485561BB6FDE518C58D8",
                  "firstName": "Семен",
                  "lastName": "Иванов",
                  "middleName": "Петрович",
                  "birthDate": "14.03.1996",
                  "birthPlace": "Москва",
                  "gender": "M",
                  "trusted": true,
                  "citizenship": "RUS",
                  "snils": "000-555-444 39",
                  "inn": "520791835020",
                  "updatedOn": 1513937119,
                  "status": "REGISTERED",
                  "verifying": false,
                  "rIdDoc": 38957
                },
                "blocked": false
              }
            ]
          },
          "branches": {
            "stateFacts": [
              "LastPage",
              "FirstPage",
              "Paginated"
            ],
            "pageSize": 100,
            "pageIndex": 1,
            "eTag": "B854C2B28B54083C063C9319950B148A1D87EDCB",
            "elements": [
              {
                "stateFacts": [
                  "Identifiable"
                ],
                "eTag": "BDD1049E273023D50516686F7FF4CD14CC938150",
                "brhOid": 1000355069,
                "name": "Московский",
                "kpp": "435354354",
                "leg": "30002",
                "contacts": {
                  "stateFacts": [
                    "hasSize"
                  ],
                  "size": 3,
                  "eTag": "BB7C4789C938FBF59F60744EC31215239D20B94F",
                  "elements": [
                    {
                      "stateFacts": [
                        "Identifiable"
                      ],
                      "eTag": "5649E98457FAD7C4B38B091EABAAE497D7C24666",
                      "id": 14283146,
                      "type": "OEM",
                      "vrfStu": "NOT_VERIFIED",
                      "value": "test@example.com"
                    },
                    {
                      "stateFacts": [
                        "Identifiable"
                      ],
                      "eTag": "E3B691F0DC97A07F271F337EF6000F671299E1C6",
                      "id": 14283149,
                      "type": "OPH",
                      "vrfStu": "NOT_VERIFIED",
                      "value": "+7(495)8736847*684764"
                    },
                    {
                      "stateFacts": [
                        "Identifiable"
                      ],
                      "eTag": "D3A1E4715F456DD2D54544E387B6159DB6E486D4",
                      "id": 14283150,
                      "type": "OFX",
                      "vrfStu": "NOT_VERIFIED",
                      "value": "+7(499)9990930"
                    }
                  ]
                },
                "addresses": {
                  "stateFacts": [
                    "hasSize"
                  ],
                  "size": 1,
                  "eTag": "8051E7E5247D83DEBFA5FFAC9410C81D1E5E1597",
                  "elements": [
                    {
                      "stateFacts": [
                        "Identifiable"
                      ],
                      "eTag": "EC676F9CDB0F1344A8EED5444A8CC0DEB98D994C",
                      "id": 27445,
                      "type": "OPS",
                      "region": "Москва",
                      "addressStr": "Москва город, Московско-Минской Дивизии площадь",
                      "countryId": "RUS",
                      "zipCode": "121096",
                      "street": "Московско-Минской Дивизии",
                      "house": "6",
                      "flat": "67"
                    }
                  ]
                }
              },
              {
                "stateFacts": [
                  "Identifiable"
                ],
                "eTag": "9438AF6F3D163DFD6A258078BC3F77D337A44B3E",
                "brhOid": 1000355068,
                "name": "Дальневосточный",
                "kpp": "948745837",
                "leg": "30001",
                "contacts": {
                  "stateFacts": [
                    "hasSize"
                  ],
                  "size": 3,
                  "eTag": "FBBF6052BCF619EF40E2B2D888DC294AB9776BDB",
                  "elements": [
                    {
                      "stateFacts": [
                        "Identifiable"
                      ],
                      "eTag": "C725D7760632612B18CBEDE303ADBA8612340488",
                      "id": 14283143,
                      "type": "OEM",
                      "vrfStu": "NOT_VERIFIED",
                      "value": "none@example.com"
                    },
                    {
                      "stateFacts": [
                        "Identifiable"
                      ],
                      "eTag": "8CE333D782D4D75A8600210BBB1E78F73B2EC5F4",
                      "id": 14283145,
                      "type": "OFX",
                      "vrfStu": "NOT_VERIFIED",
                      "value": "+7(34343)90586"
                    },
                    {
                      "stateFacts": [
                        "Identifiable"
                      ],
                      "eTag": "69344CDC7A35BD367284CB119ED237D2DBA30590",
                      "id": 14283144,
                      "type": "OPH",
                      "vrfStu": "NOT_VERIFIED",
                      "value": "+7(343)3354654*235642"
                    }
                  ]
                },
                "addresses": {
                  "stateFacts": [
                    "hasSize"
                  ],
                  "size": 1,
                  "eTag": "3786BD82486EF0DE78B9B4BF4594B00D5C660F3D",
                  "elements": [
                    {
                      "stateFacts": [
                        "Identifiable"
                      ],
                      "eTag": "E56F04079933C955AC0C24DC8DD5E1722F912224",
                      "id": 27444,
                      "type": "OPS",
                      "region": "Хабаровский",
                      "addressStr": "Хабаровский край, Николаевский район, Нижнее Пронге поселок, Школьная улица",
                      "area": "Николаевский",
                      "settlement": "Нижнее Пронге",
                      "countryId": "RUS",
                      "zipCode": "682444",
                      "street": "Школьная",
                      "house": "40"
                    }
                  ]
                }
              }
            ]
          }
        }
      }
    }

    После получения ответа рекомендуется сохранить данные обновленного ключа доступа scsToken. Это позволит в будущем обновить данные об организации, ее сотрудниках и филиалах в offline-режиме, т.е. без участия пользователя.

    Понравилась статья? Поделить с друзьями:
  • Ошибка при получении номера версии программного модуля росстата
  • Ошибка при получении набора регистра сведений аналитикаучетаноменклатуры
  • Ошибка при получении набора регистра сведений аналитика учета номенклатуры
  • Ошибка при подключении принтера к ноутбуку
  • Ошибка при подключении принтера к компьютеру