Демо: DID/VC для организаций, приборов и ИИ-агентов
Всё, что умеют did-svc и vc-svc, по шагам: веб-консоль для показа, curl и утилиты — для проверки руками.
1. Запуск
make build # bin/did, bin/vc, bin/didsign, bin/agentmanifest export IDENTITY_SYSTEM_KEY=$(bin/didsign keygen | sed -n 's/^seed: //p') DID_OPERATION_PROOF=required VC_PROOF=required DID_ANCHOR=log docker compose up -d --build
Что | Адрес |
Веб-консоль | http://localhost:8081/console |
Swagger DID | http://localhost:8080/swagger |
Swagger VC | http://localhost:8081/swagger |
Режимы (по умолчанию в compose — мягкие, чтобы не ломать стенды):
Переменная | Значения | Для демо |
|
|
|
|
|
|
|
|
|
| seed Ed25519 | identity-система подписывает DID и VC персон |
2. Портал участников и скан метки
/portal — работа от лица трёх компаний (переключатель вверху). «⚡ Зарегистрировать три компании» создаёт ключи в браузере, DID организаций и их подписанные карточки (название, ИНН, роль).
Компания | Что делает |
🏛️ «Русский регистр» | «+ Выдать сертификат» соответствия серии изготовителю; «Кого касается» — паспорта и текущие владельцы; «Отозвать» |
🏭 «Взлёт» | «+ Новый прибор» → сразу паспорт (поля — из схемы); «🏷 Метка» — QR, PNG, печать; «🤝 Передать» (шаг 1) |
🛢️ ОЙЛТИМ | «🤝 Передачи» → «✍️ Принять» (шаг 2, своей подписью становится владельцем) |
Формы строятся по GET /api/v1/schemas: новый состав полей появляется в портале и на скане без правки страниц. Ошибки — по-русски по коду и полю (missing_field → «не заполнено обязательное поле — «Номер сертификата»»).
/scan — камера (BarcodeDetector или jsQR), фото метки или ссылка; /s/<DID> открывается сразу из QR. Сверху — вердикт: ✅ подлинный и действует / ⚠️ подлинный, но сертификат отозван / ❌ недействителен; ниже — прибор, владелец (и передача, если не подтверждена), паспорт, сертификат, что проверено.
Порядок показа: регистр выдаёт сертификат → Взлёт регистрирует прибор с паспортом и показывает метку → передаёт ОЙЛТИМ → ОЙЛТИМ принимает → скан метки (✅, владелец ОЙЛТИМ) → регистр отзывает сертификат → скан (⚠️).
Если реестр запущен с API_TOKENS — «🔑 Токен» в портале (консоль берёт тот же токен).
3. Веб-консоль (для показа аналитику)
Откройте /console (нужен localhost или HTTPS: ключи и подписи — WebCrypto в браузере).
Сценарий стенда DiCE (кнопка «Пройти всё» или по шагам ▶):
# | Шаг | Что видно |
1 | Участники | «Русский регистр», «Взлёт», ОЙЛТИМ получают |
2 | Прибор |
|
3 | Сертификат серии |
|
4 | Паспорт |
|
5 | Скан метки | резолв DID → VC прибора → паспорт подлинный, сертификат действует |
6–7 | Приёмка | «Взлёт» вписывает ОЙЛТИМ в контроллеры → ОЙЛТИМ своей подписью становится владельцем |
8 | Попытка присвоить | посторонний назначает себя владельцем — 403 |
9 | Отзыв сертификата | «Взлёт» отозвать не может (422), «Русский регистр» — может |
10 | Затронутые паспорта | кого касается отзыв и кто владелец сейчас (ОЙЛТИМ); паспорт подлинный, сертификат |
11 | История прибора | все ревизии |
ИИ-агент:
# | Шаг | Что видно |
1 | DID агента |
|
2 | Мандат |
|
3 | Runtime | агент сам сообщает конфигурацию — |
4 | Вход в КТМ | challenge → подпись ключом агента → вошёл, видно владельца |
5 | Маршрут | разрешённый маршрут — |
6 | Анализ |
|
7 | Смена seed | агент поменял seed без нового мандата — |
Проводник: любой DID → документ, история с проверкой и статусом якорения, его VC с кнопкой verify; ленты событий DID (did.owner_changed при приёмке) и VC (vc.revoked); сертификаты, истекающие за 30 дней.
Журнал запросов внизу — каждый HTTP-запрос и ответ: удобно показывать, что именно подписано.
Автопроверка консоли без браузера (Node 22): node scripts/console-smoke.mjs docs/vc/console.html http://localhost:8081.
4. То же руками: curl + утилиты
B=http://localhost:8080/api/v1; V=http://localhost:8081/api/v1 bin/didsign keygen -type org > org.key # seed, jwk, did bin/didsign keygen -type agent > agent.key
Действие | Команда |
подпись операции DID |
|
подпись VC |
|
подпись отзыва |
|
манифест агента из каталога |
|
Подробные пошаговые сценарии: подписанные операции DID, подписанные VC.
5. Карта API
DID (did-svc, :8080)
Метод | Путь | Что |
POST/PUT/PATCH |
| создание / замена / изменение и деактивация — с |
GET |
| резолв, в т.ч. исторической версии |
GET |
| история; проверка подписей, хэш-цепочки, якорения |
GET |
| лента изменений DID |
POST |
| вход по ключу DID |
VC (vc-svc, :8081)
Метод | Путь | Что |
POST |
| JSON-запрос (сервис собирает VC) или |
POST |
| подлинность ( |
POST |
| отзыв — с |
GET |
| по типу, издателю, статусу, полю субъекта, сроку |
GET |
| VC, ссылающиеся на данный (паспорта сертификата), + текущие владельцы |
GET |
| лента выпусков и отзывов |
GET |
| действующий мандат агента |
POST |
| можно ли агенту вызвать маршрут |
POST |
| проверить манифест и посчитать |
6. Отрицательные кейсы для показа
Что сделать | Ответ |
создать DID без подписи ( | 401 + |
ключ-заглушка | 422 |
| 422 |
агент без | 422 |
повтор той же подписи | 409 |
подпись чужим ключом с правильным | 401 |
VC от не-владельца прибора (паспорт) / мандат не от владельца агента | 422 |
правка ревизии DID или VC прямо в БД |
|
повтор входа тем же challenge | 401 |
Журнал изменений
Дата | Перечень изменений | Автор |
2026-11-05 | Перенесён из архива DID-VC-итоги-2026-11-03 без изменения содержания. | Дис |