Аутентификация - Сценарии ExtSdk2 — различия между версиями

Материал из razgovorov.ru
Перейти к: навигация, поиск
Строка 94: Строка 94:
  
 
==Аутентификация по токену==
 
==Аутентификация по токену==
 +
Для авторизации по токену необходимо сначала получить токен от администратора интересующего аккаунта.
  
==Аутентификация по тикету==
+
После получения токена вызывается метод AuthByToken.
 +
 
 +
=== Пример кода для авторизации по токену===
 +
<source lang="json">
 +
        def test_auth_by_cert_success(self):
 +
        """Авторизация с правильным сертификатом"""
 +
        query_id = self.plugin.call_method("CallMethodWithoutAuth", "ExtSdk2.AuthByToken", json.dumps(
 +
            {"Imprint": "Отпечаток сертификата"}, ensure_ascii=True))
 +
        result2 = self.plugin.read_all_xml([query_id])
 +
</source>
 +
 
 +
=== Пример успешной авторизации по токену===
 +
Параметры запроса в CallMethodWithoutAuth
 +
<source lang="json">
 +
{
 +
  "Token": "taMjS16IMM3RMWg0STDD0UBRDc0CN5TVnjQbIoZT6NdtUbAtkLZ4lTVYhJYRx5IMzR3wlNEYEMSm1M5sMNjWjfuA3QpZjMkht57DWqntTNj2UkMTpSuE4FEF",
 +
}
 +
</source>
 +
 
 +
Ответ
 +
<source lang="json">
 +
{
 +
  'Result': '********@plugin.sbis.ru',
 +
  'Stat': {
 +
    'ExtSdk2': {
 +
      'ExtSdk2.AuthByToken': {
 +
        'count': 2,
 +
        'time': 0
 +
      }
 +
    }
 +
  }
 +
}
 +
</source>
 +
где '********@plugin.sbis.ru' в Result это идентификатор сессии, с которым в последующем необходимо вызывать остальные методы модуля ExtSdk2 через методы COM-объекта CallMethod и CallMethodXML
  
 
==Двухфакторная аутентификация ==  
 
==Двухфакторная аутентификация ==  

Версия 16:19, 15 апреля 2021

Для получения доступа к методам API требуется аутентифицироваться. Количество активных сессий у пользователя и аккаунта ограничено, поэтому Вам нужно аккуратно подойти к вопросу аутентификации. Например, не нужно аутентифицироваться перед каждым запросом.

СБИС поддерживает несколько способов аутентификации (по логину паролю, по сертификату), все они равнозначные и Вы можете воспользоваться любым из них. В результате успешной аутентификации Вы получите строку с идентификатором сессии, которую нужно сохранить и использовать при работе с API до тех пор пока не получите ошибку аутентификации.

Общая стратегия аутентификации следующая – Если у Вас есть сохраненный идентификатор сессии, то начинаете работу – делаете вызовы. Методы аутентификации Вы вызываете, если у Вас нет идентификатора сессии или если вы получили ошибку аутентификации.

В некоторых случаях, например при первом запуске или перед отправкой большого количества документов иногда возникает желание (для упрощения алгоритма) проверить действителен ли идентификатор сессии, для этого можно использовать метод ReadCurrentUserInfo. Который в случае если сессии не действительна, так же как и остальные методы вернет ошибку аутентификации

После получения COM-объекта и подключения к модулю ExtSdk2 мы можем перейти к методам авторизации. Более детальное описание находится в сценарии Подключение к ExtSdk2 через OLE. Для любой авторизации стоит использовать методы COM-объекта CallMethodWithoutAuth или CallMethodWithoutAuthXML, если параметры передаются в формате xml.

Аутентификация по логину паролю

Авторизация по логину паролю выполняется с использованием метода AuthByPassword, принимающего логин и пароль в качестве параметров.

Пример кода для авторизации по логину паролю

    def test_auth_by_password_success(self):
        """Авторизация с правильным логином и паролем"""
        query_id = self.plugin.call_method("CallMethodWithoutAuth", "ExtSdk2.AuthByPassword", json.dumps(
            {"Login": "login", "password"}, ensure_ascii=True))
        result = self.plugin.read_all_xml([query_id])

Пример успешной авторизации по логину паролю

Параметры запроса в CallMethodWithoutAuth

{
   "Login": "Иванов",
   "Password": "123"
}

Ответ

{
  'Result': '********@plugin.sbis.ru',
  'Stat': {
    'ExtSdk2': {
      'ExtSdk2.AuthByPassword': {
        'count': 2,
        'time': 0
      }
    }
  }
}

где '********@plugin.sbis.ru' в Result это идентификатор сессии, с которым в последующем необходимо вызывать остальные методы модуля ExtSdk2 через методы COM-объекта CallMethod и CallMethodXML

Аутентификация по сертификату

Для аутентификации по сертификату пользователю сначала нужно показать список сертификатов подходящих для аутентификации. Получить такой список можно при помощи метода ReadCertListForAuth.

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

Пример кода для авторизации по сертификату

        def test_auth_by_cert_success(self):
        """Авторизация с правильным сертификатом"""
        query_id = self.plugin.call_method("CallMethodWithoutAuth", "ExtSdk2.AuthByCert", json.dumps(
            {"Imprint": "Отпечаток сертификата"}, ensure_ascii=True))
        result2 = self.plugin.read_all_xml([query_id])

Пример успешной авторизации по сертификату

Параметры запроса в CallMethodWithoutAuth

{
   "Imprint": "Строка в 40 знаков",
}

Ответ

{
  'Result': '********@plugin.sbis.ru',
  'Stat': {
    'CryptoPlugin': {
      'CryptoPlugin.ParseCertificate': {
        'count': 1,
        'time': 5
      },
      'CryptoPlugin.StoreCertificate': {
        'count': 1,
        'time': 1
      }
    },
    'ExtSdk2': {
      'ExtSdk2.AuthByCert': {
        'count': 2,
        'time': 3732
      }
    }
  }
}

где '********@plugin.sbis.ru' в Result это идентификатор сессии, с которым в последующем необходимо вызывать остальные методы модуля ExtSdk2 через методы COM-объекта CallMethod и CallMethodXML

Аутентификация по токену

Для авторизации по токену необходимо сначала получить токен от администратора интересующего аккаунта.

После получения токена вызывается метод AuthByToken.

Пример кода для авторизации по токену

        def test_auth_by_cert_success(self):
        """Авторизация с правильным сертификатом"""
        query_id = self.plugin.call_method("CallMethodWithoutAuth", "ExtSdk2.AuthByToken", json.dumps(
            {"Imprint": "Отпечаток сертификата"}, ensure_ascii=True))
        result2 = self.plugin.read_all_xml([query_id])

Пример успешной авторизации по токену

Параметры запроса в CallMethodWithoutAuth

{
   "Token": "taMjS16IMM3RMWg0STDD0UBRDc0CN5TVnjQbIoZT6NdtUbAtkLZ4lTVYhJYRx5IMzR3wlNEYEMSm1M5sMNjWjfuA3QpZjMkht57DWqntTNj2UkMTpSuE4FEF",
}

Ответ

{
  'Result': '********@plugin.sbis.ru',
  'Stat': {
    'ExtSdk2': {
      'ExtSdk2.AuthByToken': {
        'count': 2,
        'time': 0
      }
    }
  }
}

где '********@plugin.sbis.ru' в Result это идентификатор сессии, с которым в последующем необходимо вызывать остальные методы модуля ExtSdk2 через методы COM-объекта CallMethod и CallMethodXML

Двухфакторная аутентификация

Если у пользователя настроена двухфакторная аутентификация вы получите ошибку ….. . Сценарий работы с двухфакторной аутентификацией описан в этом разделе.