Руководство по интеграции eID API: паттерны, код и безопасность
Руководство с кодом по интеграции национальных eID через eID API: перенаправление, push в приложение, QR, NFC-карта и OpenID4VP, что разработать, поля результата, резервные сценарии и чек-лист безопасности.

Коротко
eID API позволяет вашему процессу регистрации запросить у национальной схемы электронного удостоверения личности (eID) аутентификацию человека и получить подписанные атрибуты личности. Каждая схема использует один из пяти шаблонов: перенаправление в браузере, push-запрос в приложение с кодом для сверки, QR-код или запуск приложения, считывание чип-карты по технологии ближней бесконтактной связи (NFC) или предъявление данных из европейского кошелька цифровой идентичности (EUDI Wallet) по протоколу OpenID for Verifiable Presentations (OpenID4VP).[2][6][8][14]
- Подпись и уровень доверия вы всё равно проверяете сами.
- Для большинства схем до первого вызова нужен договор, сертификат или сертифицированный брокер.[12][13][15]
Это руководство с упором на код предназначено для инженеров, которые подключают национальные eID к онбордингу.
Как работает eID API: пять шаблонов взаимодействия
Ваша система выступает доверяющей стороной (relying party, RP). Она никогда не видит само средство идентификации, только подписанный ответ о человеке.
| Шаблон | Что делает пользователь | Как ваш бэкенд получает ответ | Пример |
|---|---|---|---|
| Перенаправление (OpenID Connect, OIDC) | Уходит с вашей страницы на страницу входа схемы, входит в систему, возвращается | Код авторизации, который обменивается на подписанный ID-токен | ID Austria, где вход через OIDC поддерживает только поток с кодом авторизации[6] |
| Push-запрос в приложение с кодом | Вводит персональный код, сверяет код на экране с кодом в приложении, вводит PIN в приложении | Вы ждете подписанный результат или периодически опрашиваете схему | Smart-ID, Mobile-ID[10][20] |
| QR-код или запуск приложения | Сканирует анимированный QR-код на компьютере, или приложение открывается на том же телефоне | Вы опрашиваете схему, пока запрос не будет завершен | BankID Sweden[8] |
| Карта и NFC | Прикладывает чип-карту к телефону, вводит PIN карты | Сервер eID считывает чип и возвращает атрибуты | Немецкая карта eID[14] |
| Предъявление из кошелька (OpenID4VP) | Подтверждает в приложении-кошельке, какими атрибутами поделиться | Предъявление подписанных атрибутов с выборочным раскрытием | EUDI Wallet[2] |
Некоторые схемы работают через публичный шлюз: эстонский TARA представляет собой шлюз с потоком authorization code, через который подключаются ID-карта, Smart-ID, Mobile-ID и eID других стран ЕС.[7] Какую модель использует каждая схема, см. в материале Схемы eID по странам.
Что разрабатываете вы и что берет на себя провайдер
Сначала доступ, потом код. В Дании каждый поставщик услуг обязан подключаться через сертифицированного брокера MitID.[12] В Швеции BankID приобретают у банка или реселлера и заказывают сертификат доверяющей стороны.[15] В Германии можно развернуть собственный eID-сервер, использовать размещенный у провайдера eID-сервис со своим сертификатом или работать через сервис идентификации и не иметь собственного сертификата.[13] Для EUDI Wallet доверяющая сторона должна зарегистрироваться в государстве-члене, в котором она учреждена.[1]
| Слой | Напрямую, по каждой схеме отдельно | Через один eID API |
|---|---|---|
| Договоры и сертификаты | Отдельно для каждой схемы, продление по графику каждой схемы | Их держит провайдер; у вас один договор |
| Код протоколов | OIDC, API с опросом (polling), eID-сервер, OpenID4VP | Один API сессий и единый формат результата |
| Экраны | Выбор схемы, QR-код, код сверки, ошибки, для каждой схемы | Размещенный у провайдера сценарий или SDK |
| Проверка подписи | На вашей стороне, для ключа и формата каждой схемы | Выполняет провайдер, результат передается в виде вердикта |
| Уровень доверия | Запрашиваете и проверяете вы | Фиксируется в результате; политику по-прежнему задаете вы |
| Резервный вариант для людей без eID | Второй поставщик или ручная проверка | Проверка по документу в том же сценарии |
| Решение об онбординге | За вами | По-прежнему за вами |
Сертифицированные брокеры есть для большинства северных и балтийских схем. При большом объеме по одной схеме подключайтесь напрямую; если пользователи приходят из нескольких стран, используйте один API.
Поток с перенаправлением, шаг за шагом
Это поток OIDC с кодом авторизации. Ваш бэкенд перенаправляет браузер со случайными state и nonce, затем обменивает полученный код на ID-токен и проверяет его.
Пользователь входит с помощью eID
Проверка state, nonce, подписи, acr
Вход с перенаправлением. Брокеры и шлюзы добавляют промежуточные переходы на шаге 2, но не новые шаги для вас.
Важнее всего проверка после шага 5. Согласно документации Digdir по ID-porten, клиент «ОБЯЗАН проверить, что уровень безопасности (acr) достаточно высок».[5] Понимайте acr как уровень доверия (LoA), который подтверждает схема, и отклоняйте всё, что ниже требований вашей политики.
Поток с push-уведомлением в приложении и кодом для сверки
При Smart-ID и Mobile-ID пользователь не покидает вашу страницу. Пользователь вводит личный идентификационный код (Mobile-ID также запрашивает номер телефона), ваша страница показывает короткий код, и тот же код появляется в приложении. Пользователь подтверждает операцию PIN-кодом на телефоне, только если коды совпадают.[20] Smart-ID также может показать три кода и попросить пользователя выбрать правильный.[10]
Выберите способ проверки
Войдите с помощью электронного удостоверения личности, которым вы уже пользуетесь.
Smart-ID
Использовать документ, удостоверяющий личность
1Пользователь выбирает eID из тех, что вы принимаете.
Сверьте код
4821
Тот же код появляется в вашем приложении Smart-ID.
2Ваша страница проверки на используемом устройстве показывает код для сверки. Тот же код появляется в приложении.
Введите PIN-код
Только если код совпадает с кодом на экране.
3Пользователь вводит PIN-код в приложении, никогда на вашей странице.
Вы прошли верификацию
- Полное имяПередается
- Дата рожденияПередается
- Персональный кодПередается
- АдресНе передается
4Подписанные атрибуты поступают на ваш бэкенд.
BankID Sweden устроен так же, только вместо ввода кода используется QR. Пользователь открывает приложение на том же устройстве с помощью autostart-токена или сканирует анимированный QR-код на другом устройстве. Ваш бэкенд опрашивает /collect, пока заказ не завершится. Завершенный заказ содержит персональный номер, полное имя, имя и фамилию, а также данные об устройстве, подпись и необязательные поля оценки риска.[8] Smart-ID+ переводит Smart-ID на эту модель: динамический QR на десктопе, переход из приложения в приложение на мобильных устройствах. Пользователям больше не нужно вводить персональный код на сайте.[11]
Приложение показывает тот же код, пользователь вводит PIN
Вход через Smart-ID или Mobile-ID в том порядке, в котором его видит пользователь: персональный код, контрольный код на вашей странице, тот же код в приложении, затем PIN.[20] В варианте BankID с QR шаг 1 исчезает, а на шаге 2 показывается QR-код.
Карта и NFC, а также EUDI Wallet через OpenID4VP
При использовании немецкой ID-карты с функцией eID пользователь прикладывает карту к телефону с NFC в приложении AusweisApp. По закону до ввода PIN приложение должно показать наименование и адрес поставщика услуги и запрашиваемые категории данных. Передаются только эти категории.[14]
По данным OpenID Foundation, OpenID4VP 1.0 является финальной спецификацией.[16] Architecture and Reference Framework (ARF) предусматривает следующие варианты удаленного предъявления: OpenID4VP через редиректы и пользовательские URI-схемы, например openid4vp://, OpenID4VP через W3C Digital Credentials API или ISO/IEC 18013-7 через этот API.[2][17] Прежде чем что-либо передать, кошелек проверяет подлинность вашего сертификата доступа, убеждается, что вы не запрашиваете больше атрибутов, чем зарегистрировали, и дает пользователю подтвердить каждый атрибут.[2] Портрет становится обязательным в данных идентификации личности (PID) только с 11 августа 2028, за исключением случаев, когда пользователь явно от него отказывается.[18]
- 23 июля 2026ARF v3.0.0Текущая версия рамочной архитектуры кошелька.
- 24 декабря 2026Срок для кошельковКаждое государство-член предоставляет как минимум один кошелек.
- 24 декабря 2027Обязательный приемЧастные доверяющие стороны, которые по закону или договору обязаны применять строгую аутентификацию пользователя, принимают кошелек по запросу пользователя. Микро- и малые предприятия освобождены.
- 11 августа 2028ПортретПортрет в PID становится обязательным, если пользователь от него не отказался.
Даты по EUDI Wallet, которые определяют дорожную карту eID API.[1][2][18]
В руководстве по EUDI Wallet описаны регистрация доверяющей стороны и готовность по странам.
Ошибки, резервные сценарии и повторные попытки
Вход заканчивается одним из исходов: завершен, отменен, истекло время ожидания или сбой. Последние три обрабатывайте одинаково и для каждой страны решайте, что происходит дальше.
1Предложите eID страны пользователя
Список допустимых схем для каждой страны, выбирает пользователь.
Вход завершен с действительной подписью и требуемым уровнем
Сохраните подписанные атрибуты
Имя, дата рождения, идентификатор, уровень.
Переход на резервный путь или отказ
Документ с чтением чипа или завершение сессии.
2Проверка и решение
Примените собственные правила оценки риска к проверенным данным.
Никогда не повторяйте отменённый вход автоматически. Сделайте обработку callback идемпотентной, чтобы обновление страницы или повторное событие не могли открыть два аккаунта. Сохраните путь для людей без eID. Обычно это документ, удостоверяющий личность, с чтением чипа по NFC, проверкой liveness и сравнением лица. Этот путь описан в статье Проверка eID по NFC и безопасность чипа.
Чек-лист безопасности для интеграции eID API
- Генерируйте новые
stateиnonceдля каждого входа и отклоняйте callback, который им не соответствует. - Проверяйте подпись каждого токена или результата до чтения любого атрибута.
- Проверяйте уровень доверия в результате, а не только в запросе.[5]
- Требуйте уровень «существенный» или «высокий», если к вам применяется путь eID по AMLR.[3]
- Никогда не принимайте PIN-код eID на своей странице. Его вводят в приложении схемы.[20]
- Для входа с другого устройства используйте QR-код или запуск из приложения в приложение, а не ввод кодов вручную.[11]
- Запрашивайте только те атрибуты, которые вы зарегистрировали и которые вам нужны.[1]
- Проверяйте подписи и временные метки webhook, прежде чем доверять результату.
Правовая основа: Регламент о противодействии отмыванию денег (AMLR), который применяется с 10 июля 2027 года. Статья 22(6)(b) допускает «средства электронной идентификации, отвечающие требованиям Регламента (ЕС) № 910/2014 в отношении уровней доверия „существенный“ или „высокий“».[3] Не все схемы нотифицированы: MitID входит в список нотифицированных схем ЕС, Smart-ID нет.[4]
Обратите внимание
ARF предупреждает, что межустройственные сценарии с пользовательскими URI «уязвимы для фишинга и атак ретрансляции», и не рекомендует пользовательские схемы URI для предъявления с другого устройства.[2] По данным Computer Sweden, в июле 2019 года полиция сообщила о снижении телефонного мошенничества с BankID на 90% после внедрения QR-кодов.[9]
Как Didit помогает с интеграцией eID API
Didit объединяет пять действующих eID в одном API сессий (MitID, BankID Sweden, Finnish Trust Network, Smart-ID и Mobile-ID, в семи странах), с путём проверки по документу в том же рабочем процессе. Другие схемы есть в дорожной карте Didit, а приём EUDI Wallet скоро появится. Didit никогда не запрашивает PIN-код. Подробнее на странице цифровых ID-кошельков и в документации по кошелькам.[19]
Включите действующие eID по странам
В консоли: Workflows, шаг ID Verification, Countries, «Wallets accepted». Через API функция ID Verification (OCR) принимает объект methods с ключами в виде кодов стран ISO 3166-1 alpha-3, который передаётся в POST /v3/workflows/. Документированный фрагмент для Дании:[21]
{ "feature": "OCR", "config": { "methods": { "DNK": { "document": { "enabled": true }, "wallet": { "enabled": true, "providers": ["mitid"], "on_failure": "fallback_to_document" } } } } }
И для Эстонии, с приёмом обоих eID на базе телефона:[20]
{ "EST": { "document": { "enabled": true }, "wallet": { "enabled": true, "providers": ["smart_id", "mobile_id"], "on_failure": "fallback_to_document" } } }
providers является списком разрешённых провайдеров, а не рейтингом. on_failure принимает значение fallback_to_document или decline. Если кошелёк недоступен в вашей среде, сохранение отклоняется целиком, поэтому сначала изучите каталог.[21]
Скриншот ожидается: console-wallets-accepted
Выбор принимаемых eID для одной страны в консоли Didit.
Создайте сессию и получите результат
POST /v3/session/ с вашим workflow_id (и, при необходимости, vendor_data и callback) возвращает session_id, url и session_token. Откройте URL или используйте SDK.[24] Результат приходит через вебхук или GET /v3/session/{id}/decision/ с verification_method: "wallet", assurance: "cryptographic" и объектом wallet_verification.[19]
| Поле | Пример | Что оно означает |
|---|---|---|
provider | mitid | Какой eID выбрал пользователь |
issuing_authority | Danish Agency for Digital Government | Кто стоит за идентичностью |
issuing_country | DNK | Маршрут идентификации, а не гражданство |
level_of_assurance | substantial | Уровень, заявленный схемой |
signature_valid | true | Подписанное утверждение прошло проверку |
attributes | full_name, date_of_birth, cpr_alias | Проверенные атрибуты, названия зависят от eID |
portrait, face_match_score | null | Ни один действующий eID не передает фотографию |
Если уровень ниже запрошенного, вход не проходит. Оплачиваются только завершённые входы.[19] Цены: MitID, Finnish Trust Network $0.25; BankID Sweden, Smart-ID, Mobile-ID $0.20.
Вебхуки и песочница
Проверяйте X-Signature-V2 с помощью секрета получателя, отклоняйте X-Timestamp старше 300 секунд и обеспечивайте идемпотентность по event_id. Неудачная доставка повторяется до двух раз.[22] В песочнице приложение может включить все кошельки, одобряет сессии без реального входа и предлагает wallet_cancelled, wallet_timeout и wallet_provider_error для проверки вашего резервного сценария.[23]
| eID | Страны | Уровень в Didit | Статус в Didit |
|---|---|---|---|
| MitID | Дания | Существенный | Доступно |
| BankID Sweden | Швеция | Существенный | Доступно |
| Finnish Trust Network | Финляндия | Существенный | Доступно |
| Smart-ID | Эстония, Латвия, Литва, Бельгия | Высокий | Доступно |
| Mobile-ID | Эстония, Литва | Высокий | Доступно |
| BankID Norway | Норвегия | Не задан | Скоро |
| Freja eID | Швеция | Не указано | Скоро |
| itsme | Бельгия | Не указано | Скоро |
| iDIN | Нидерланды | Не указано | Скоро |
| Немецкая ID-карта с функцией eID | Германия | Не указано | Скоро |
| FranceConnect | Франция | Не указано | Скоро |
| ID Austria | Австрия | Не указано | По запросу |
| Cl@ve | Испания | Не указано | По запросу |
| SPID | Италия | Не указано | По запросу |
| Swiss E-ID | Швейцария | Не определено | По запросу |
| EUDI Wallet | ЕС и ЕЭЗ | Не определено | Скоро |
Didit обеспечивает
- Доступ к схемам, сертификаты и проверку подписи
- Единый API сессий, размещенный сценарий и SDK
- Проверку по документу с чтением NFC-чипа для пользователей без eID
Остается за вами
- Какие eID принимать в каждой стране
- Уровень доверия, которого требует ваша политика
- Решение об онбординге и ответственность
Один eID API для всех стран, в которых вы работаете
Включайте действующие eID по странам, сохраняйте документы как резервный вариант и платите только за завершенные входы.
Главное
- Каждая eID использует один из пяти шаблонов: перенаправление, push-уведомление в приложении с кодом, QR-код или запуск приложения, карта и NFC либо OpenID4VP.
- Сначала нужен доступ: брокеры, договоры, сертификаты или регистрация.
- Проверяйте подпись и уровень доверия в каждом результате.
- Частные доверяющие стороны, которые по закону или договору обязаны применять строгую аутентификацию пользователей, должны принимать EUDI Wallet по запросу пользователя до 24 декабря 2027 (микро- и малые предприятия освобождены).
Часто задаваемые вопросы
Что такое eID API?
Это интерфейс, через который ваше приложение запрашивает у национальной схемы электронной идентификации или у провайдера, подключенного к нескольким схемам, аутентификацию человека и получает подписанные атрибуты личности. Подпись и уровень доверия в ответе вы по-прежнему проверяете сами.
Нужна ли отдельная интеграция для каждой схемы eID?
При прямом подключении да: у каждой схемы свой договор, сертификат и протокол. В Дании необходимо использовать сертифицированного брокера MitID, а BankID Sweden приобретается у банка или реселлера.[12][15] Единый eID API скрывает эти различия за одной сессией и одним форматом результата.
Какой протокол используют национальные eID?
Многие схемы используют OpenID Connect, часто через шлюз, например ID-porten или TARA.[5][7] Другие используют собственные API с опросом статуса (BankID Sweden, Smart-ID) или eID-сервер, который считывает чип-карту (Германия).[8][13] Кошелек EUDI использует OpenID4VP или ISO/IEC 18013-7.[2]
Какие данные возвращает вход через eID?
Это зависит от схемы. BankID Sweden возвращает персональный номер, полное имя, имя и фамилию.[8] Немецкая eID-карта передает только категории данных, указанные в сертификате поставщика услуг (§ 18(5)). Она не передает номер национального удостоверения личности, так как его нет в перечне § 18(3).[14]
Как обеспечить соблюдение уровня доверия?
Запрашивайте нужный уровень и проверяйте уровень, указанный в результате, например claim acr в OIDC. ID-porten указывает, что клиенты обязаны проверять, достаточно ли высок уровень доверия.[5] Считайте недостаточным все, что ниже уровня вашей политики, и не открывайте счет.
Что делать, если у пользователя нет eID или он отменил вход?
Для каждой страны решите, предлагать резервный способ или отказывать. Не повторяйте отмененный вход автоматически.
Как протестировать интеграцию eID без реальных пользователей?
Смоделируйте подтверждения, отмены и тайм-ауты в песочнице поставщика. Смоделированное подтверждение не доказывает, что реальный человек сможет пройти вход: перед запуском проведите санкционированный тест на реальном устройстве.[20]
Когда компании обязаны принимать кошелек EUDI?
Частные доверяющие стороны, которые по закону или договору обязаны применять строгую аутентификацию пользователей, должны принимать его по запросу пользователя до 24 декабря 2027. Микро- и малые предприятия освобождены от этого требования.[1]
Источники
- Регламент (ЕС) 2024/1183 (eIDAS 2), EUR-Lex, Официальный журнал от 30 апреля 2024, статьи 5a, 5b и 5f.
- Architecture and Reference Framework v3.0.0, проект Европейской комиссии EUDI Wallet, выпуск от 23 июля 2026, разделы 4.4.3, 5.7.1 и 6.6.3.
- Регламент (ЕС) 2024/1624 (AMLR), EUR-Lex, статья 22(6).
- Обзор предварительно уведомленных и уведомленных схем eID в рамках eIDAS, Европейская комиссия, просмотрено 5 октября 2026.
- ID-токен ID-porten, Агентство по цифровизации Норвегии (Digdir).
- Anbindung mit OpenID Connect, документация для разработчиков ID Austria.
- Техническая спецификация TARA, Департамент государственных информационных систем Эстонии (RIA).
- Auth and sign: collect, документация для разработчиков BankID.
- QR-koden gjorde susen: BankID-bedrägerierna ned med 90 procent, Computer Sweden, 3 июля 2019 (вторичный источник).
- Почему я иногда вижу один код подтверждения, а иногда три, Smart-ID.
- Как новый Smart-ID защищает меня от мошенничества, Smart-ID.
- Брокеры MitID, Агентство цифрового государственного управления Дании.
- Стать поставщиком услуг, AusweisApp, федеральное правительство Германии.
- Параграф 18 Закона о паспортах и удостоверениях личности (PAuswG), Gesetze im Internet.
- Подключите свою компанию к BankID, BankID.
- Утверждена финальная спецификация OpenID for Verifiable Presentations 1.0, OpenID Foundation.
- Digital Credentials, W3C.
- Имплементационный регламент Комиссии (ЕС) 2026/1731, EUR-Lex, портрет в PID с 11 августа 2028.
- Кошельки цифровой идентификации, документация Didit.
- Интеграция Smart-ID и Mobile-ID, документация Didit.
- Настройки функций рабочих процессов, документация Didit.
- Вебхуки, документация Didit.
- Песочница и тестовые данные, документация Didit.
- Быстрый старт, документация Didit.
Все национальные eID, их уровень и статус смотрите на странице верификации eID.
Запустите вход через eID без отдельного договора по каждой схеме
Начните с уже работающих eID, подключайте схемы по мере того, как они нужны вашим пользователям, а для всех остальных сохраните проверку по документам.
Похожие статьи
- e-Devlet для бизнеса: проверка личности в Турции
- Интеграция Singpass Myinfo: руководство для бизнеса в Сингапуре
- Интеграция с Cl@ve в Испании: кто может подключиться и чем её заменить
- Проверка PhilSys: как компании проверяют национальный ID
- Руководство для верификатора OpenID4VP: приём EUDI Wallet
- Регламент eIDAS: что меняет eIDAS 2 (2024/1183)