Коды ошибок ​

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

Формат кода ​

text
DAT_<AREA>_<CAUSE>
ПрефиксОбласть
DAT_TOKEN_Строки DAT и истечение срока
DAT_CERT_Строки и состояние сертификатов
DAT_SIG_Подписи и проверка
DAT_CRYPTO_Шифрование и расшифровка
DAT_KEY_Форматы ключей и полномочия
DAT_MANAGER_Менеджеры сертификатов
DAT_CONFIG_Аргументы вызовов и конфигурация
DAT_INTERNAL_Внутренние компоненты runtime
DAT_CMS_Синхронизация клиента CMS
DAT_AUTH_, DAT_REQ_, DAT_STORE_Сервер CMS

_UNKNOWN используется только тогда, когда ошибку нельзя отнести к другому коду в её области. Одинаковая причина имеет одинаковое имя во всех областях.

Классификации повторных попыток ​

КлассификацияЗначениеОбработка
TransientМожет пройти после восстановления внешнего условияПовторить ограниченное число раз с backoff
StateМожет пройти после синхронизации сертификатов или изменения времениОбновить нужное состояние и повторить
PermanentС тем же input снова завершится ошибкойИсправить input, конфигурацию или код

Токены и сертификаты ​

DAT_TOKEN_MALFORMEDБез влиянияПостоянная

У DAT неверное число полей, числовое значение или представление Base64Url. Отбросьте input.

DAT_TOKEN_EXPIREDБез влиянияПостоянная

Время истечения DAT равно текущему времени или прошло. Получите новый DAT.

DAT_CERT_MALFORMEDБез влиянияПостоянная

Строка сертификата имеет неверную структуру или представление поля.

DAT_CERT_NOT_FOUNDБез влиянияСостояние

Нет сертификата, соответствующего `cid` DAT. Проверьте состояние синхронизации сертификатов.

DAT_CERT_NOT_SYNCEDБез влиянияСостояние

Нужный сертификат мог ещё не дойти до сервиса. Немедленно синхронизируйте и повторите оценку.

DAT_CERT_NOT_YET_VALIDБез влиянияСостояние

Время начала действия сертификата ещё не наступило. Проверьте системные часы и сроки распространения.

DAT_CERT_EXPIREDБез влиянияПостоянная

Период проверки сертификата закончился.

DAT_CERT_DUPLICATEЧастичноеПостоянная

Один `cid` встречается в одном списке импорта несколько раз. Отклоните весь импорт.

Подписи, шифрование и ключи ​

DAT_SIG_MISMATCHБез влиянияПостояннаяshieldПодозрительная

Подпись не совпадает с телом. DAT изменён или подписан другим ключом.

DAT_CRYPTO_TAG_MISMATCHБез влиянияПостояннаяshieldПодозрительная

Тег аутентификации AES-GCM не совпадает. Проверьте изменение ciphertext или несоответствие сертификата.

DAT_KEY_INVALIDБез влиянияПостоянная

Неверная длина, формат ключа или комбинация алгоритмов.

DAT_SIG_KEY_MISSINGБез влиянияПостоянная

Предпринята попытка выпустить DAT сертификатом verify-only. Сервису выпуска нужен полный сертификат.

DAT_SIG_MISMATCH и DAT_CRYPTO_TAG_MISMATCH — ошибки, для которых public security-event API возвращает true. Один неверный input не означает сбой сервиса, но повторения следует считать наблюдаемым событием безопасности.

Менеджеры и конфигурация ​

DAT_MANAGER_NO_CERTIFICATEЧастичноеСостояние

У менеджера нет сертификатов. Импортируйте их или завершите синхронизацию CMS.

DAT_MANAGER_NO_ISSUABLE_CERTIFICATEЧастичноеСостояние

У менеджера есть сертификаты, но сейчас нет полного сертификата для выпуска. Изучите cause chain: срок действия, время начала или состояние verify-only.

DAT_CONFIG_ARGUMENT_INVALIDБез влиянияПостоянная

Аргумент вызова или значение конфигурации находится вне допустимого диапазона.

DAT_INTERNAL_UNAVAILABLEКритическоеПостоянная

На текущей платформе недоступна необходимая криптографическая или сетевая возможность.

Клиенты CMS ​

КодЗначениеОбычная обработка
DAT_CMS_URI_INVALIDНеверный URI CMSИсправить конфигурацию
DAT_CMS_UNAUTHORIZEDСбой аутентификацииИсправить токен
DAT_CMS_FORBIDDENРоли токена не хватает разрешенияПроверить роль токена
DAT_CMS_ENDPOINT_NOT_FOUNDПуть отсутствует или отличаетсяПроверить URL и путь CMS
DAT_CMS_NETWORKОшибка соединения или передачиПроверить сеть, затем выполнить backoff
DAT_CMS_TIMEOUTПревышен лимит времениИзменить настройки сети и timeout
DAT_CMS_SERVER_ERRORОшибка сервера CMSПроверить сервер, затем выполнить backoff
DAT_CMS_RESPONSE_INVALIDНеверный формат успешного ответаПроверить контракт сервера и клиента
DAT_CMS_VERSION_RESETВерсия сервера откатиласьПроверить данные CMS и deployment
DAT_CMS_IMPORT_FAILEDПолученные сертификаты не примененыИзучить cause chain
DAT_CMS_STOPPEDИспользован остановленный менеджерСоздать новый менеджер или исправить порядок вызовов

Библиотеки с начальной синхронизацией best-effort сохраняют ошибку в поле last-error. Чтобы прервать запуск, используйте API немедленной синхронизации, который возвращает или выбрасывает ошибку напрямую.

Сервер CMS ​

КодHTTPЗначение
DAT_AUTH_UNAUTHORIZED401Токен отсутствует или недействителен
DAT_AUTH_FORBIDDEN403Роль токена не разрешает запрос
DAT_REQ_ALG_UNSUPPORTED400Неподдерживаемое имя алгоритма
DAT_REQ_NOT_FOUND404·405Несоответствие пути или метода
DAT_REQ_TOO_LARGE413Зарезервированный код для слишком большого тела запроса
DAT_STORE_UNAVAILABLE503Storage временно недоступен
DAT_STORE_UNKNOWN500Неклассифицированная ошибка обработки storage

Текущие клиенты не раскрывают напрямую код сервера из JSON-ответов не 2xx, а преобразуют HTTP status в код DAT_CMS_*. Поэтому логи сервера и коды клиента могут отличаться.

Доступ по языкам ​

СредаКод ошибкиКлассификация retry
Rusterr.code()err.retry()
Godat.Code(err)dat.Retry(err)
JavaScript / TypeScripterror.codeerror.retry
Pythonerror.codeerror.retry
Rubyerror.codeerror.retry
Java / Kotlinerror.codeerror.retry
C#error.Codeerror.Retry
C / C++dat_error_code(error)dat_error_retry(error)

Для ошибок с причиной нижнего уровня изучите exception chain языка или API доступа к причине.