Цепной код ABAC не работает один раз после обновления атрибута идентификации - PullRequest
0 голосов
/ 31 января 2019

Я использую ткань cid для кодировки ABAC.Работает отлично;однако однажды после обновления атрибута удостоверения (через узел sdk) ABAC не работал должным образом.

Мой рабочий процесс:

1. Зарегистрируйте и зарегистрируйте удостоверение через узел SDK.

Ex value,

attrs: [{"name": "role", "value": "client", "ecert": true}]

2.Chaincode вызывать.ABAC работает как задумано.

identity, err: = cid.New (заглушка)

err = identity.AssertAttributeValue ("role", "client")

Обновить атрибут идентичности (роль -> пользователь)

Значение Ex,

attrs: [{"name": "role", "value": "пользователь "," ecert ": true}]

Chaincode invoke.Ошибка ABAC с тем же условием.

Когда я зарегистрировал атрибут, я обнаружил, что удостоверение по-прежнему несет старую роль (клиент) вместо обновленного значения (пользователь);однако таблица пользователей fabric-ca-server.db имеет последнее значение атрибута (user).немного запутался здесь !!

Я что-то пропустил?Может ли кто-нибудь помочь мне выяснить точную причину этого?

Редактировать:

Ткань v1.4

1 Ответ

0 голосов
/ 31 января 2019

В моем примере рабочего процесса ниже использовался двоичный CLI Fabric-ca-client, а не код клиента.Но я использовал объект cid в моем цепном коде / смарт-контракте.

Когда вы Регистрируете идентификатор, создается запись в базе данных CA.

Когда вы Зарегистрируйте идентификатор, сертификат и ключ загружаются - если вы включите флаг ecert, то атрибут включится в сертификат.

Если вы измените идентификатор записи в полеБаза данных CA.(Но сертификат все еще имеет старое значение)

Когда вы повторно регистрируете идентификатор, сертификат заменяется, и новый сертификат содержит новое измененное значение атрибута.При использовании подключения к цепочечному коду с новым сертификатом объект cid покажет новое значение.

...