Обработка ошибок (iOS)
В данном разделе рассмотрены основные коды ошибок SDK, сценарии их возникновения и обработки. Полный список классов ошибок приведен в разделе Типы ошибок.
При обработке ошибок необходимо обратить внимание на следующие аспекты:
- Закрытие UI
- Ошибки использования ключей аутентификации
- Ошибки регистрации нового устройства
- Сетевые ошибки
- Ошибки взаимодействия с сервисом
Большинство методов SDK используют ключи аутентификации и делают обращения на сервер, что требует корректной обработки сетевых ошибок и ошибок использования ключей аутентификации.
Закрытие UI
Если пользователь закроет UI SDK, то SDK не завершит соответствующую операцию и вернет ошибку USER_CANCELED_FORM (DSSCancelType.userCancel / DSSCancelType.tokenUserCancel) (287).
Список экранов SDK, при закрытии которых будет возвращена ошибка:
- новый пароль на ключи аутентификации,
- ввод пароля для доступа к ключам аутентификации,
- подтверждение привязки нового устройства к учетной записи,
- сканирование QR-кода,
- подтверждение операций,
- ввод ПИН-кода Рутокен,
- ввод PUK-кода Рутокен,
- подтверждение/отклонение привязки устройства к учетной записи при помощи имеющегося устройства,
- экран с QR-кодом для привязки устройства к учетной записи при помощи имеющегося устройства.
Ошибки использования ключей аутентификации
Большинство вызовов API SDK связаны с обращением к сервисам КриптоПро Ключ. Каждое обращение к сервису требует аутентификации, задействующей ключи аутентификации. Доступ к ключам аутентификации требует взаимодействия с пользователем (ввод пароля или биометрии). Также необходимо учитывать, что ключи аутентификации имеют срок действия, состояние и связаны с учетной записью пользователя на сервисе.
| Ошибка | Код | Описание |
|---|---|---|
| DSSServerError.unauthorized.userBlocked(DSSServerErrorType.unauthorized(DSSServerError.unauthorized.userBlocked)) | 277 | Ошибка аутентификации. Учетная запись пользователя заблокирована на сервере. Получен HTTP-ответ со статусом 401. |
| DSSServerError.unauthorized.userNotFound (DSSServerErrorType.unauthorized(DSSServerError.unauthorized.userNotFound)) | 278 | Ошибка аутентификации. Учетная запись пользователя не найдена или удалена на сервере. Получен HTTP-ответ со статусом 401. |
| DSSServerError.unauthorized.deviceBlocked (DSSServerErrorType.unauthorized(DSSServerError.unauthorized.deviceBlocked)) | 280 | Ошибка аутентификации. Мобильное устройство пользователя заблокировано на сервере. Получен HTTP-ответ со статусом 401. |
| DSSSessionError.keyExpired (DSSSessionError.keyExpired) | 5 | Истек срок действия ключей аутентификации пользователя |
| DSSError.kidNotFound (DSSError.kidNotFound) | 12 | Не удалось загрузить ключи аутентификации. Ключи с указанным KID не найдены. |
| KEYS_BLOCKED_FOR_ERROR_ATTEMPTS (нет аналога!) | 20 | Ключи аутентификации временно заблокированы из-за превышения попыток ввода пароля |
| INVALID_KEY_ID (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidKeyId)) | 271 | Передан невалидный идентификатор ключей аутентификации (KID). Получен HTTP-ответ со статусом 400. |
| REQUESTED_DSSServerError.unauthorized.userNotFound (DSSServerErrorType.badRequest(DSSServerError.badRequest.requestedUserNotFound)) | 272 | УЗ пользователя не найдена. Получен HTTP-ответ со статусом 400. |
| DSSServerError.badRequest.invalidKeyState (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidKeyState)) | 273 | Статус ключей аутентификации не соответствует запрошенной операции. Получен HTTP-ответ со статусом 400. |
| DSSServerError.unauthorized.invalidHmac (DSSServerErrorType.unauthorized(DSSServerError.unauthorized.invalidHmac)) | 279 | Ошибка аутентификации. Передан неверный код аутентификации. Получен HTTP-ответ со статусом 401. |
| DSSEncryptError.functionFailed (DSSEncryptError.functionFailed) | 230 | Не удалось вычислить код аутентификации. |
| JNI_FUN_FAILED (любой случай из enum DSSEncryptError) | 216 | Ошибка выполнения криптографической операции. Нативный код ошибки и описание содержится в описании. |
| DSSServerError.unauthorized.invalidAuthenticationScheme (DSSServerErrorType.unauthorized(DSSServerError.unauthorized.invalidAuthenticationScheme)) | 276 | Ошибка аутентификации. Пользователю отключена аутентификация при помощи мобильного приложения. Получен HTTP-ответ со статусом 401. |
| NOT_SAFE_USAGE_CANCELLED_BY_USER (enum CSPInitCode, но больше подходит слуай CSPInitCode.init_lockScreen_not_installed) | 220 | SDK не инициализирован. Пользователь запретил использовать API SDK, так как устройство не является безопасным. |
Ошибка NOT_SAFE_USAGE_CANCELLED_BY_USER возникает если SDK не был инициализирован или пользователь запретил использовать API SDK, так как устройство не является безопасным.
Необходимо повторно вызвать метод SDKFramework.init
При возникновении ошибок DSSServerError.unauthorized.userBlocked, DSSServerError.unauthorized.deviceBlocked необходимо обратиться к администратору КриптоПро Ключ для уточнения причин блокировки устройства.
При возникновении ошибок DSSSessionError.keyExpired, DSSServerError.unauthorized.userNotFound, DSSServerError.unauthorized.userNotFound необходима повторная
регистрация учетной записи пользователя и/или устройства пользователя.
Ошибка DSSServerError.unauthorized.invalidAuthenticationScheme вызвана тем, что на сервере в учетной записи пользователя отключена аутентификация при помощи мобильного приложения.
Необходимо обратиться к администратору КриптоПро Ключ.
Ошибка DSSError.kidNotFound вызвана с тем, что в API SDK передан идентификатор ключей аутентификации KID, которых нет на устройстве.
Ошибка DSSServerError.badRequest.invalidKeyState говорит о том, что устройство не находится в нужном состоянии для выполнения операции. Вероятнее всего
не была завершена регистрация устройства и оно не находится в статусе ACTIVE.
Необходимо актуализировать статус устройства Policy.getUserDevices и исходя из состояния устройства завершить регистрацию.
Ошибка DSSServerError.unauthorized.invalidHmac вызвана неверным кодом аутентификации, отправленым на сервис. Ошибка может быть вызвана расхождением времени на клиенте и сервисе.
В зависимости от настроек сервис допускается расхождение времени от 4 до 30 минут.
Ошибка DSSEncryptError.functionFailed вызвана низкоуровневыми ошибками при вычислении кода аутентификации. Для устранения ошибки можно попробовать перезапустить приложение.
Если ошибка не устранится, то может потребоваться повторная регистрация устройства на сервере.
Ошибка JNI_FUN_FAILED вызвана низкоуровневыми ошибками криптографичесих операций. Для устранения ошибки можно попробовать перезапустить приложение.
Если ошибка не устранится, то может потребоваться повторная регистрация устройства на сервере.
Ошибки регистрации нового устройства
В сценарии регистрации по QR-коду возможны следующие ошибки:
WRONG_QR(DSSAuthError.invalidQrCode) - отсканирован неверный QR-код. Требуется отсканировать QR-код созданный для регистрации мобильного приложения. Ошибка возникает при вызове метода Auth.kInit. (Изменил Auth.scanQR на kInit)KINIT_NOT_LOADED(DSSQRCodeError.qrNotLoaded) - для вызова метода Auth.kinit требуется отсканировать QR-код. Ошибка может возникнуть если межды вызовами Auth.scanQR и Auth.kinit приложение было закрыто.KINIT_ALREADY_USED(DSSServerErrorType.badRequest(DSSServerError.badRequest.kinitAlreadyUsed)) - отсканированный QR-код уже был использован или удален на сервере. Для устранения ошибки требуется создать новый QR-код.USING_THAT_PROTECTION_TYPE_PERMITTED_BY_POLICY(DSSAuthError.biometricKeyProtectionImpossible / throw DSSAuthError.noPolicyKeyProtectionError) в метод Auth.kinit передан способ защиты ключей аутентификации ниже настроенного на сервере.
В сценарии регистрации с уникальным идентификаторов (онлайн-регистрации) возможны следующие ошибки:
SELF_REGISTRATION_DISABLED(DSSAuthError.selfRegistrationImpossible) - онлайн-регистрация запрещена на сервере. Ошибка может возникнуть при вызове метода Auth.init.USING_THAT_PROTECTION_TYPE_PERMITTED_BY_POLICY(DSSAuthError.biometricKeyProtectionImpossible / throw DSSAuthError.noPolicyKeyProtectionError) в метод Auth.init передан способ защиты ключей аутентификации ниже настроенного на сервере.
Ошибка DSSServerError.badRequest.invalidKeyState (DSSAuthError.incorrectKeyStatus / (DSSServerErrorType.unauthorized(DSSServerError.unauthorized.invalidKeyState))) может возникнуть при вызове методов Auth.confirm, Auth.verify.
Ошибка говорит о том, что состояние устройства на сервере не соответствует вызываемому методу.
Если устройство находится в статусе Created, то необходимо вызвать метод Auth.confirm для перевода устройства в статус Installed или NotVerified.
Новый статус устройства зависит от сценария регистрации.
Если устройство находится в статусе NotVerified, то необходимо вызвать метод Auth.verify для перевода устройства в статус Active.
Ошибка DSSServerError.unauthorized.invalidAuthenticationScheme (DSSServerErrorType.unauthorized(DSSServerError.unauthorized.invalidAuthenticationScheme)) вызвана тем, что на сервере в учетной записи пользователя отключена аутентификация при помощи мобильного приложения.
Необходимо обратиться к администратору КриптоПро Ключ.
Ошибка KEY_ALREADY_CONFIRMED (DSSServerErrorType.badRequest(DSSServerError.badRequest.keyAlreadyConfirmed)) говорит о том, что ожидалось состояние устройство Created. Необходимо актуализировать состояние устройства при помощи метода
Policy.getUserDevices и, исходя из состояния устройства, завершить регистрацию.
Ошибка INVALID_PROFILE_HMAC (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidProfileHmac)) говорит о том, что при вызове метода Auth.verify на сервере был отправлен неправильный код подтверждения
привязки устройства. Необходимо актуализировать данные учетной записи и устройства при помощи метода Policy.getUserDevices
и повторить вызов метода Auth.verify.
Ошибка INVALID_VERIFICATION_NONCE (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidVerificationNonce)) говорит о том, что перед вызовом метода Auth.verify требуется отсканировать QR-код для подтверждения
привязки устройства к учетной записи.
| Ошибка | Код | Описание |
|---|---|---|
| SELF_REGISTRATION_DISABLED (DSSAuthError.selfRegistrationImpossible) | 1 | Настройками сервера запрещена Online-регистрация пользователя. Ошибку возвращает вызов метод Auth.init() |
| DSSError.kidNotFound (DSSError.kidNotFound) | 12 | Не найдены ключи аутентификации по указанному идентификатору KID. |
| WRONG_QR (DSSAuthError.invalidQrCode) | 19 | Не верный QR-код. Не удалось прочитать данные из QR-кода. |
| QR_NOT_IN_BASE64 (DSSAuthError.wrongQrString) | 21 | Не удалось прочитать QR-код. |
| DSSServerError.badRequest.invalidKeyState (DSSAuthError.incorrectKeyStatus / (DSSServerErrorType.unauthorized(DSSServerError.unauthorized.invalidKeyState))) | 273 | Не верный статус ключей аутентификации. |
| USING_THAT_PROTECTION_TYPE_PERMITTED_BY_POLICY (DSSAuthError.biometricKeyProtectionImpossible / throw DSSAuthError.noPolicyKeyProtectionError) | 29 | Выбранный способ защиты ключей аутентификации не соответствует требованиям заданным на сервере. |
| KEY_ALREADY_CONFIRMED (DSSServerErrorType.badRequest(DSSServerError.badRequest.keyAlreadyConfirmed)) | 269 | Установка ключей аутентификации уже была выполнена. Получен HTTP-ответ со статусом 400. Ошибку может вернуть метод Auth.confirm(). |
| KINIT_ALREADY_USED (DSSServerErrorType.badRequest(DSSServerError.badRequest.kinitAlreadyUsed)) | 270 | QR-код для привязки УЗ уже был использован или удален. Получен HTTP-ответ со статусом 400. |
| KINIT_NOT_LOADED (DSSQRCodeError.qrNotLoaded) | 46 | В сценарии регистрации устройства по QR-коду не был отсканирован QR-код. Ошибку возвращает вызов метод Auth.kinit() |
| JNI_FUN_FAILED (любой случай из enum DSSEncryptError) | 216 | Ошибка выполнения криптографической операции. Нативный код ошибки и описание содержится в описании. |
| INVALID_PROFILE_HMAC (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidProfileHmac)) | 274 | Ошибка подтверждения УЗ пользователя. Передан неверный код подтверждения УЗ. Получен HTTP-ответ со статусом 400. |
| INVALID_VERIFICATION_NONCE (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidVerificationNonce)) | 275 | Ошибка подтверждения УЗ пользователя. Передан неверный идентификатор из QR-кода. Получен HTTP-ответ со статусом 400. |
| DSSServerError.unauthorized.invalidAuthenticationScheme (DSSServerErrorType.unauthorized(DSSServerError.unauthorized.invalidAuthenticationScheme)) | 276 | Ошибка аутентификации. Пользователю отключена аутентификация при помощи мобильного приложения. Получен HTTP-ответ со статусом 401. |
Сетевые ошибки
Серверные ошибки представляют из себя структуру DSSServerError, которая имеет следующие поля:
public let kind: DSSServerErrorType
public var description: String?
| Поле | Тип | Описание |
|---|---|---|
| kind | DSSServerErrorType | перечисление возращаемых ошибок. Серверная ошибка маппируется в конкретный случай ошибки или в случай unknown, если такого не было в списке, и возвращается из SDK. |
| description | String | описание конкретной ошибки, полученное от сервера. |
Примечание
В случае, если описание ошибки description не было получено от сервера, будет взято описание ошибки из поля errorDescription ошибки SDK.
Тип DSSServerErrorType
| Ошибка | Описание |
|---|---|
| otherError | прочие ошибки, например, отсутствие соединения |
| serverError | ошибки со http кодом 500, 502, 503 |
| unauthorized | ошибки со http кодом 401 |
| badRequest | ошибки со http кодом 400 |
Пример перехвата одного из типов серверной ошибки:
do {
//вызов метода
} catch let error as DSSServerError {
if case .unauthorized(.deviceBlocked) = error.kind {
//обработка ошибки
}
}
Перечисленные ниже ошибки возникают в тех случаях, когда на запрос к сервису был получен ответ с HTTP-статусом, отличным от 200.
| Ошибка | Код | Описание |
|---|---|---|
| <!-- REQUEST_WAS_LARGER | 413 | Переданные на сервер данные превышают ограничения, установленные на сервере. Получен HTTP-ответ со статусом 413. --> |
| INTERNAL_SERVER_ERROR (DSSServerErrorType.serverError(DSSServerError.serverError.internalServerError)) | 500 | Получен HTTP-ответ со статусом 500. |
| BAD_GATEWAY (DSSServerErrorType.serverError(DSSServerError.serverError.badGateway)) | 502 | Получен HTTP-ответ со статусом 502. |
| SERVICE_UNAVAILABLE (DSSServerErrorType.serverError(DSSServerError.serverError.serviceUnavailable)) | 503 | Получен HTTP-ответ со статусом 503. |
| RESPONSE_CODE_NOT_OK (DSSServerErrorType.badRequest(DSSServerError.badRequest.unknown) / (DSSServerErrorType.unauthorized(DSSServerError.unauthorized.unknown))) | 876 | Получен HTTP-ответ со статусом 400, 401 и неизвестным прикладным кодом ошибки. Код ошибки и описание ошибки содержится в описании. |
| DESERIALIZATION_ERROR (DSSLocalNetError.mapping) | 3 | Ошибка десериализации ответа сервера. |
| UNEXPECTED_NETWORK_ERROR (DSSServerErrorType.otherError(DSSServerError.otherError.inner)) | 2 | Произошла ошибка при установлении соединения с сервером. Описание ошибки содержится в описании. |
| NETWORK_ERROR (DSSServerErrorType.otherError(DSSServerError.otherError.inner)) | 4 | Не удалось установить соединение с сервером. Описание ошибки содержится в описании. |
При возникновении ошибок INTERNAL_SERVER_ERROR, BAD_GATEWAY, SERVICE_UNAVAILABLE можно повторить запрос позже или обратиться к Администратору КриптоПро Ключ.
Ошибка RESPONSE_CODE_NOT_OK возникает при получении от сервера HTTP-ответа со статусом 400, 401 и неизвестным прикладным кодом ошибки. То есть SDK не смог отобразить
код ошибки, полученный от сервера, на код ошибки SDK.
В данном случае пользователю можно отобразить описание ошибки.
Ошибка UNEXPECTED_NETWORK_ERROR, NETWORK_ERROR возникает при невозможности установления соединения с сервером. Подробности ошибки содержатся в описании ошибки.
Ошибка может быть вызвана следующими причинами.
- Ошибки TLS-соединения (не установлен корневой сертификат, не удалось проверить сертификат сервера на отзыв, и т.п.);
- Time-out соединения;
- Ошибки разрешения доменного имени;
- другие ошибки.
Ошибки взаимодействия с сервером
Данные ошибки могут возникнуть, если клиент передал на сервер невалидный запрос или состояние данных на сервере не позволяет выполнить операцию.
| Ошибка | Код | Описание |
|---|---|---|
| ACCESS_POLICY_VIOLATION (DSSServerErrorType.badRequest(DSSServerError.badRequest.accessPolicyViolation)) | 232 | Действие запрещено настройками сервера. Сервер вернул ответ с HTTP-статусом 400. |
| CONFIRMATION_POLICY_VIOLATION (DSSServerErrorType.badRequest(DSSServerError.badRequest.confirmationPolicyViolation)) | 233 | Действие может быть выполнено только со подтверждение операции. Сервер вернут ответ с HTTP-статусом 400. |
| INVALID_SUBJECT_NAME (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidSubjectName)) | 234 | Указанное в запросе на сертификат имя субъекта не соответствует требованиям. Получен HTTP-ответ со статусом 400. |
| INVALID_TEMPLATE (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidTemplate)) | 235 | Указан неверный шаблон сертификата. Получен HTTP-ответ со статусом 400. |
| INVALID_ENROLL (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidEnroll)) | 236 | Указан неверный идентификатор обработчика запросов на сертификат. Получен HTTP-ответ со статусом 400. |
| INVALID_REQUEST (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidRequest)) | 237 | Неверный запрос на сертификат или связанные с запросом на сертификат данные. Получен HTTP-ответ со статусом 400. |
| INVALID_PIN (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidPin)) | 238 | Неверный ПИН-код для доступа к ключу подписи, хранящемуся на сервере. Получен HTTP-ответ со статусом 400. |
| INVALID_LICENSE (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidLicense)) | 239 | На сервере нет доступных лицензий для создания нового сертификата пользователя. Получен HTTP-ответ со статусом 400. |
| INVALID_CERTIFICATE_ID (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidCertificateId)) | 240 | Передан неверный идентификатор сертификата. Получен HTTP-ответ со статусом 400. |
| CERTIFICATE_NOT_FOUND_ID (DSSServerErrorType.badRequest(DSSServerError.badRequest.certificateNotFoundId)) | 241 | Сертификат не найден по идентификатору. Получен HTTP-ответ со статусом 400. |
| REQUEST_NOT_FOUND_BY_ID (DSSServerErrorType.badRequest(DSSServerError.badRequest.requestNotFoundById)) | 242 | Запрос на сертификат не найден по идентификатору. Получен HTTP-ответ со статусом 400. |
| UNSIGNED_REQUEST_INVALID_STATE (DSSServerErrorType.badRequest(DSSServerError.badRequest.unsignedRequestInvalidState)) | 243 | Запрос на сертификат для мобильного приложения уже был обработан. Получен HTTP-ответ со статусом 400. |
| DUPLICATE_FRIENDLY_NAME (DSSServerErrorType.badRequest(DSSServerError.badRequest.duplicateFriendlyName)) | 244 | Отображаемое имя уже назначено другому сертификату. Получен HTTP-ответ со статусом 400. |
| INVALID_CERT_REQUEST (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidCertRequest)) | 245 | Не найден запрос на сертификат. Получен HTTP-ответ со статусом 400. |
| PENDING_REQUESTS_EXIST (DSSServerErrorType.badRequest(DSSServerError.badRequest.pendingRequestsExist)) | 246 | Ошибка создания запроса на сертификат. У пользователя уже есть необработанный запрос на сертификат. Получен HTTP-ответ со статусом 400. |
| CERT_ALREADY_INSTALLED (DSSServerErrorType.badRequest(DSSServerError.badRequest.certAlreadyInstalled)) | 247 | Сертификат уже был установлен. Получен HTTP-ответ со статусом 400. |
| DUPLICATE_CERT_FOUND (DSSServerErrorType.badRequest(DSSServerError.badRequest.duplicateCertFound)) | 248 | Сертификат уже был установлен для другой учетной записи. Получен HTTP-ответ со статусом 400. |
| KEY_NOT_FOUND (DSSServerErrorType.badRequest(DSSServerError.badRequest.keyNotFound)) | 249 | Не найден ключ подписи, соответствующий сертификату. Получен HTTP-ответ со статусом 400. |
| KEY_TYPE_MISMATCH (DSSServerErrorType.badRequest(DSSServerError.badRequest.keyTypeMismatch)) | 250 | Устанавливаемый сертификат не соответствует типу закрытого ключа в зависимости от его расположения. Получен HTTP-ответ со статусом 400. |
| INVALID_CERTIFICATE_STATUS (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidCertificateStatus)) | 251 | Неверный статус сертификата для выполнения отзыва/приостановления/восстановления. Получен HTTP-ответ со статусом 400. |
| CONTENT_REQUIRED (DSSServerErrorType.badRequest(DSSServerError.badRequest.contentRequired)) | 252 | Не передан документ для выполнения операции. Получен HTTP-ответ со статусом 400. |
| INVALID_CONTENT (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidContent)) | 253 | Получены неверные данные при усовершенствовании подписи. Получен HTTP-ответ со статусом 400. |
| INVALID_CERTIFICATE (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidCertificate)) | 254 | Сертификат не может быть использован для выполнения операции. Получен HTTP-ответ со статусом 400. |
| INVALID_SIGNATURE_TYPE (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidSignatureType)) | 255 | Неверный тип подписи, переданный из мобильного приложения. Получен HTTP-ответ со статусом 400. |
| INVALID_PROCESSING_TEMPLATE (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidProcessingTemplate)) | 256 | Неверный идентификатор шаблона подписи, переданный из мобильного приложения. Получен HTTP-ответ со статусом 400. |
| INVALID_SIGNATURE_PARAMS (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidSignatureParams)) | 257 | Неверный набор параметров подписи, переданный из мобильного приложения. Получен HTTP-ответ со статусом 400. |
| INVALID_PRESIGNED_HASH_DATA (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidPresignedHashData)) | 258 | Ошибка подписи с использованием ключей в мобильном приложении. Получен HTTP-ответ со статусом 400. |
| INVALID_SIGNED_DOCS_IDS_DATA (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidSignedDocsIdsData)) | 259 | Ошибка подписи с использованием ключей в мобильном приложении. Получен HTTP-ответ со статусом 400. |
| DOC_NOT_FOUND (DSSServerErrorType.badRequest(DSSServerError.badRequest.docNotFound)) | 260 | Не найден документ, указанный в операции. Получен HTTP-ответ со статусом 400. |
| KEY_UNAVAILABLE (DSSServerErrorType.badRequest(DSSServerError.badRequest.keyUnavailable)) | 261 | Ошибка доступа к серверному ключу подписи. Получен HTTP-ответ со статусом 400. |
| INVALID_TSP_ADDRESS (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidTspAddress)) | 262 | Указан неверный адрес TSP-службы. Получен HTTP-ответ со статусом 400. |
| INVALID_CERT (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidCert)) | 263 | Истек срок действия сертификата. Получен HTTP-ответ со статусом 400. |
| ARCHIVE_DISABLED (DSSServerErrorType.badRequest(DSSServerError.badRequest.archiveSisabled)) | 264 | Ошибка архивирования ключа подписи. Архивирование ключей подписи запрещено настройками сервера. Получен HTTP-ответ со статусом 400. |
| INVALID_CERT_TYPE (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidCertType)) | 265 | Ошибка архивирования ключа подписи. Сертификат не поддерживает архивирование. Получен HTTP-ответ со статусом 400. |
| ALREADY_ARCHIVED (DSSServerErrorType.badRequest(DSSServerError.badRequest.alreadyArchived)) | 266 | Ошибка создания архивной копии ключа подписи. Ключ подписи уже был архивирован. Получен HTTP-ответ со статусом 400. |
| CERT_MISMATCH (DSSServerErrorType.badRequest(DSSServerError.badRequest.certMismatch)) | 267 | Ошибка установки сертификата. Сертификат не соответствует закрытому ключу. Получен HTTP-ответ со статусом 400. |
| NOT_ARCHIVED (DSSServerErrorType.badRequest(DSSServerError.badRequest.notArchived)) | 268 | Ошибка восстановления ключа подписи из архивной копии. Ключ подписи не был архивирован. Получен HTTP-ответ со статусом 400. |
| KINIT_ALREADY_USED (DSSServerErrorType.badRequest(DSSServerError.badRequest.kinitAlreadyUsed)) | 270 | QR-код для привязки УЗ уже был использован или удален. Получен HTTP-ответ со статусом 400. |
| INVALID_KEY_ID (DSSServerErrorType.badRequest(DSSServerError.badRequest.invalidKeyId)) | 271 | Передан невалидный идентификатор ключей аутентификации (kid). Получен HTTP-ответ со статусом 400. |
| REQUESTED_DSSServerError.unauthorized.userNotFound (DSSServerErrorType.badRequest(DSSServerError.badRequest.requestedUserNotFound)) | 272 | УЗ пользователя не найдена. Получен HTTP-ответ со статусом 400. |
Список типов ошибок
| Тип ошибки | Описание |
|---|---|
| DSSAuthError | ошибки, которые возникают при создании/изменении или обращении к пользовательскому ключу аутентификации; |
| DSSCryptoLibError | ошибки, возникающие при выполнении криптографических операций; |
| DSSCertError | ошибки при работе с методами, которые подписывают, используют, удаляют сертификаты; |
| DSSOperationError | эти ошибки возникают, когда операция уже не актуальна или не может быть выполнена из-за изменения в системе; |
| DSSSignError | ошибки, возникшие во время обработки операции подписи/расшифрования; |
| DSSError | различные внутренние ошибки системы при обработке данных; |
| DSSServerError | ошибки, которые произошли в результате взаимодействия с сервером; |
| DSSLocalNetError | ошибки, связанные с формированием или обработкой сетевых запросов; |
| DSSEncryptError | ошибки во время взаимодействия с пользовательским ключом аутентификации; |
| DSSQRCodeError | невалидный QR-код. Например, если QR-код содержит некорректные данные. |
| DSSCancelType | эта ошибка связана с пользовательской отменой операции. Например, если пользователь прерывает выполнение операции до ее завершения. |
Все ошибки, за исключением DSSServerError, являются перечислениями, которые реализуют системный протокол Error.
Каждый тип ошибки также реализует системный протокол LocalizedError, который содержит в себе поле errorDescription, из которого можно получить описание конкретной ошибки.