Сценарий физлица и VC

Этот сценарий показывает новый слой Identity для физического лица. Мы создаем Person, сервис сам выпускает DID для этого человека, затем на этот DID выпускается PersonCredential.

Сценарий важен тем, что проверяет связку бизнес-сущности и уже реализованных DID/VC сервисов. Физлицо хранится как отдельная запись, DID служит публичным идентификатором, а VC подтверждает данные физлица без подключения криптографической подписи.

Откройте Swagger:

http://localhost:8081/swagger

Для проверки деактивации DID также откройте DID Swagger:

http://localhost:8080/swagger

1. Создать физлицо

В VC Swagger откройте POST /v1/persons.

Тело запроса:

{ "lastName": "Иванов", "firstName": "Иван", "patronymic": "Иванович", "snils": "123-456-789-01", "inn": "123456789012" }

Ожидаемый результат:

201 Created result.id заполнен result.did начинается с did:i:fl: result.systemDid заполнен

Сохраните значения:

personId = result.id personDid = result.did

2. Получить физлицо

Откройте GET /v1/persons/{id}.

Значение:

personId

Ожидаемый результат:

200 OK ответ содержит того же Person и тот же DID

3. Получить список физлиц

Откройте GET /v1/persons.

Параметры:

limit = 10 offset = 0

Ожидаемый результат:

200 OK persons содержит созданное физлицо

4. Изменить данные физлица

Откройте PATCH /v1/persons/{id}.

Тело запроса:

{ "patronymic": "Петрович" }

Ожидаемый результат:

200 OK info.patronymic изменился did остался прежним

5. Выпустить PersonCredential

Откройте POST /v1/persons/{id}/credentials.

Значение:

personId

Ожидаемый результат:

201 Created credential.type содержит PersonCredential credential.credentialSubject.id равен personDid status равен active

Сохраните:

credentialId = result.credential.id

6. Проверить credential

Откройте POST /v1/credentials/{id}/verify.

Значение:

credentialId

Ожидаемый результат:

200 OK result равен registry_valid subjectDid равен resolved cryptographicallyVerified равен false и checks.proof равен missing — без IDENTITY_SYSTEM_KEY cryptographicallyVerified равен true и checks.proof равен valid — с IDENTITY_SYSTEM_KEY (VC подписан системой)

6.1. Выпустить PersonCredential с выбранными claims

Откройте POST /v1/persons/{id}/credentials.

Значение:

personId

Тело запроса:

{ "includePersonId": false, "includeClaims": [], "additionalClaims": { "age": 21, "education": "bachelor", "fridayBeerPermission": "allowed to take one beer from my fridge on Friday evening" } }

Ожидаемый результат:

201 Created credential.credentialSubject.id равен personDid credential.credentialSubject.personId отсутствует credential.credentialSubject.lastName отсутствует credential.credentialSubject.firstName отсутствует credential.credentialSubject.snils отсутствует credential.credentialSubject.age равен 21 credential.credentialSubject.fridayBeerPermission заполнен

Важно: это не криптографическое selective disclosure. Сервис выпускает новую VC, в которой выбранные поля просто не включены. Уже выпущенную VC частично скрыть нельзя без отдельного механизма verifiable presentation/selective disclosure.

6.2. Простая форма без Swagger

Откройте:

http://localhost:8081/person-demo

В форме можно:

создать физлицо выбрать claims для PersonCredential убрать ФИО, СНИЛС, ИНН или personId добавить произвольные claims выпустить VC проверить VC посмотреть JSON ответа

7. Деактивировать DID физлица

В DID Swagger откройте PATCH /v1/dids/{did}.

Значение:

personDid

Content-Type:

application/merge-patch+json

Тело запроса:

{ "didDocumentMetadata": { "deactivated": true } }

Ожидаемый результат:

200 OK deactivated равен true

8. Проверить credential после деактивации DID

Снова откройте POST /v1/credentials/{id}/verify.

Ожидаемый результат:

200 OK result равен invalid subjectDid равен deactivated

Это значит, что PersonCredential остается в реестре, но больше не проходит проверку из-за деактивированного DID физлица.

Негативная проверка

Откройте POST /v1/persons.

Тело запроса:

{ "lastName": "Иванов", "firstName": "Иван", "snils": "123" }

Ожидаемый результат:

422 Unprocessable Entity физлицо не создано

Журнал изменений

Дата

Перечень изменений

Автор

2026-11-05

Перенесён из архива DID-VC-итоги-2026-11-03 без изменения содержания.

Дис