1

我正在将织物cid用于链码 ABAC。它工作正常;但是,一旦更新了身份属性(通过节点 sdk),ABAC 就无法按预期工作。

我的工作流程:

1.通过节点SDK注册和注册身份。

防爆值,

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

2.链码调用。ABAC 按预期工作。

身份,错误:= cid.New(存根)

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

  1. 更新身份属性(角色 -> 用户)

防爆值,

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

  1. 链码调用。相同条件下的 ABAC 错误。

当我记录属性时,我发现身份仍然带有旧角色(客户端)而不是更新值(用户);但是,fabric-ca-server.db users 表具有最新的属性值(用户)。这里有点困惑!

我错过了任何步骤吗?谁能帮我找出造成这种情况的确切原因?

编辑:

面料 v1.4

4

1 回答 1

2

我下面的示例工作流使用了 fabric-ca-client 二进制 CLI,而不是客户端代码。但我确实在我的链码/智能合约中使用了 cid 对象。

当您注册一个 ID 时,会在 CA 数据库中创建一个条目。

当您注册ID 时,将下载证书和密钥 - 如果您包含 ecert 标志,则该属性包含在证书中。

如果您修改CA 数据库中的条目 ID。(但证书仍有旧值)

当您重新注册ID 时,证书将被替换,并且新证书包含新修改的属性值。当您使用带有新证书的链码连接时,cid对象将显示新值。

于 2019-01-31T16:10:36.903 回答