Hyperledger Fabric의 관리자에게 속성 값을 추가하는 방법은 무엇입니까?

HectorCode

fabcar-sample (v1.4)을 기반으로 관리자 및 사용자에 대한 속성 값을 사용하려는 앱을 개발했습니다. 관리자에 등록하는 동안 속성 값을 추가하는 방법에 대한 문제가 있습니다. 관리자에 대한 속성 값을 추가 할 수 있는지 모르겠습니다. 내가 본 예에서 등록 된 사용자로부터 만 추가되었습니다. fabcar 샘플에서는 관리자가 사용자와 달리 등록되지 않고 등록 된 것처럼 보입니다.


  • registerUser.js
const gateway = new Gateway();
await gateway.connect(ccpPath, { wallet, identity: 'admin', discovery: { enabled: true, asLocalhost: true } });
console.log('Create a new gateway for connecting to our peer node');
// Get the CA client object from the gateway for interacting with the CA.
const ca = gateway.getClient().getCertificateAuthority();
const adminIdentity = gateway.getCurrentIdentity();
console.log('Get the CA client object from the gateway for interacting with the CA');

const aff = adminIdentity.getAffiliation();
const secret = await ca.register({ affiliation: aff, enrollmentID: username, role: 'client', attrs: [ {"name": "email", "value": "[email protected]", "ecert": true} ] }, adminIdentity);
const enrollment = await ca.enroll({ enrollmentID: username, enrollmentSecret: secret, attr_reqs: [{ name: "email", optional: false }]});
  • enrollAdmin.js
const caInfo = ccp.certificateAuthorities[ca_info];
const caTLSCACerts = caInfo.tlsCACerts.pem;
const ca = new FabricCAServices(caInfo.url, { trustedRoots: caTLSCACerts, verify: false }, caInfo.caName);

// Create a new file system based wallet for managing identities.
const walletPath = path.join(process.cwd(), wallet_info);
const wallet = new FileSystemWallet(walletPath);
const enrollment = await ca.enroll({ enrollmentID: username, enrollmentSecret:'adminpw'});
const identity = X509WalletMixin.createIdentity(MSP, enrollment.certificate, enrollment.key.toBytes());
await wallet.import(username, identity);
  • smartcontract.go
func (c *SmartContract) getEmail(stub shim.ChaincodeStubInterface) (string, error) {
    email, ok, err := cid.GetAttributeValue(stub, "email")

    if err != nil {
        return "", err
    }

    if !ok {
        return "", errors.New("email attribute is missing")
    }

    return email, nil
}

이 과정에서 사용자와 같은 관리자를 등록하지 않은 동안 관리자에 속성 값을 추가하는 방법에 대한 아이디어가 있습니까?

김명길

admin클라이언트 의 경우 fabric-ca-server가 실행되면 설정에서 값을 설정할 수 있습니다. 대부분의 예제는 -b옵션 을 사용하여 ID와 비밀번호로만 작동합니다 . 처럼fabric-ca-server start -b admin:adminpw -d


기본 구성은 fabric-ca-server-config.yaml파일 에서 변경할 수 있습니다 .

fabric-ca-server-config.yaml 링크는 fabric-samples v2.0이지만 fabric-ca는 변경 사항이 없으며 (v1.4) 구성 양식이 동일합니다.

admin's attr이 파일에 추가 할 수 있습니다 .


[편집] 가이드 문서에 따라 작성했는데 작동하지 않는 것을 확인했습니다. 코드를 심층 분석 한 후 정규식이 제대로 작동하지 않는 것을 확인하고 수정했습니다.

hf.Registrar.Attributes: "*"

...에

hf.Registrar.Attributes: "email,hf.Registrar.Roles,hf.Registrar.DelegateRoles,hf.Revoker,hf.IntermediateCA,hf.GenCRL,hf.Registrar.Attributes,hf.AffiliationMgr"

fabric-ca-server-config.yaml에서


여기에 예가 있습니다.

  • docker-compose-ca.yaml
version: '3'

services:
  ca.org1.example.com:
    image: hyperledger/fabric-ca:1.4
    environment:
      - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
      - FABRIC_CA_SERVER_CA_NAME=ca.org1.example.com
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem
      - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/<your_ca_org1_private_key>
      - FABRIC_CA_SERVER_PORT=7054
    ports:
      - "7054:7054"
    command: sh -c 'fabric-ca-server start -d'
    volumes:
      # mounting fabric-ca-server-config.yaml file
      - ./fabric-ca-server-config.yaml:/etc/hyperledger/fabric-ca-server/fabric-ca-server-config.yaml
      - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config
    container_name: ca.org1.example.com
  • fabric-ca-server-config.yaml
...
registry:
  maxenrollments: -1
  identities:
     - name: test
       pass: testpw
       type: client
       affiliation: ""
       attrs:
          # <add_your_attrs>
          email: "[email protected]"
          hf.Registrar.Roles: "*"
          hf.Registrar.DelegateRoles: "*"
          hf.Revoker: true
          hf.IntermediateCA: true
          hf.GenCRL: true
          hf.Registrar.Attributes: "email,hf.Registrar.Roles,hf.Registrar.DelegateRoles,hf.Revoker,hf.IntermediateCA,hf.GenCRL,hf.Registrar.Attributes,hf.AffiliationMgr"
          hf.AffiliationMgr: true
...
  • enrollAdmin.js
...
// Enroll the admin user, and import the new identity into the wallet.
// with attrs
const enrollment = await ca.enroll({ enrollmentID: 'test', enrollmentSecret: 'testpw', 
                                     attr_reqs: [{ name: "email", optional: false }] });
const x509Identity = {
    credentials: {
        certificate: enrollment.certificate,
        privateKey: enrollment.key.toBytes(),
    },
    mspId: 'Org1MSP',
    type: 'X.509',
};
await wallet.put('admin', x509Identity);
console.log('Successfully enrolled admin user "admin" and imported it into the wallet');
...
node enrollAdmin.js
Successfully enrolled admin user "admin" and imported it into the wallet

효과가있다!


[참고] Docker 또는 구성을 건드리지 않으려면 작업에 다른 관리자를 추가해도됩니다.

  • registerAndEnrollAdmin.js
...

// Register the user, enroll the user, and import the new identity into the wallet.
const adminUser = await provider.getUserContext(adminIdentity, 'admin');

const secret = await ca.register({
    affiliation: 'org1.department1',
    enrollmentID: 'admin2',
    role: 'client',
    attrs: [ {"name": "hf.Registrar.Roles", "value": "client,orderer,peer"}, {"name": "hf.Registrar.DelegateRoles", "value": "client,orderer,peer"}, {"name": "hf.Revoker", "value": "true"},
            {"name": "email", "value": "[email protected]"}, {"name": "hf.Registrar.Attributes", "value": "email, hf.Registrar.Roles, hf.Registrar.DelegateRoles, hf.Revoker, hf.Registrar.Attributes"} ] }
, adminUser);
const enrollment = await ca.enroll({
    enrollmentID: 'admin2',
    enrollmentSecret: secret,
    attr_reqs: [{ name: "email", optional: false }]
});
...

다음을 사용하여 사용자를 등록 할 수 있습니다. admin2

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

사용자 정의 htmlhelper에서 "class"의 기본 속성 값을 추가하는 방법은 무엇입니까?

분류에서Dev

Hyperledger Fabric-CA에서 MySQL을 db로 추가하는 방법은 무엇입니까?

분류에서Dev

Angular에서 모듈의 종속성 목록에 종속성을 추가하는 방법은 무엇입니까?

분류에서Dev

Gradle의 다른 종속성에 로컬 jar 종속성을 추가하는 방법은 무엇입니까?

분류에서Dev

다 대다 관계의 속성에서 장고 쿼리의 값을 얻는 방법은 무엇입니까?

분류에서Dev

다 대다 관계의 속성에서 장고 쿼리의 값을 얻는 방법은 무엇입니까?

분류에서Dev

내 선택 상자의 각 옵션에 데이터 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

LDIF 파일에 objectclass 및 사용자 정의 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

reactjs의 자식 요소에 추가 속성을 전달하는 방법은 무엇입니까?

분류에서Dev

표준 HTML 요소에 사용자 정의 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

모델에없는 속성을 레일의 객체에 추가하는 방법은 무엇입니까?

분류에서Dev

enum 값의 추가 속성을 얻는 방법은 무엇입니까?

분류에서Dev

JTree : 노드의 속성을 자체 잎으로 추가하는 방법은 무엇입니까?

분류에서Dev

kotlin-multiplatform (kotlin 1.3.50)의 build.gradle.kts에 종속성을 추가하는 방법은 무엇입니까?

분류에서Dev

GCP의 Dataproc 클러스터에 jar 종속성을 추가하는 방법은 무엇입니까?

분류에서Dev

기존 속성의 TypeScript 인터페이스에 별칭을 추가하는 방법은 무엇입니까?

분류에서Dev

Typescript의 "window"전역 개체에 "adsbygoogle"애드 센스 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

추가 LDAP 속성을 Glassfish의 Principal 개체에 매핑하는 방법은 무엇입니까?

분류에서Dev

div 컨테이너의 이미지에 "rel"속성을 추가하는 방법은 무엇입니까?

분류에서Dev

Windows 10의 드라이브 속성에 보안 탭을 추가하는 방법은 무엇입니까?

분류에서Dev

배열의 각 객체에 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

서버의 이미지 파일에 "대체"속성을 추가하는 방법은 무엇입니까?

분류에서Dev

R : 노드에서 두 개의 XML 속성을 가장 잘 추출하는 방법은 무엇입니까?

분류에서Dev

neo4j에서 관계 속성에 여러 값을 추가하는 방법은 무엇입니까?

분류에서Dev

Ant에서-한 속성을 다른 속성의 값으로 사용하는 방법은 무엇입니까?

분류에서Dev

경로 매개 변수가 Blazor의 속성에 값을 할당하는 방법은 무엇입니까?

분류에서Dev

지시문에서 "{{aaa}} / {{bbb}}"값의 속성을 가져오고 실행하는 방법은 무엇입니까?

분류에서Dev

PHP에서 XML에 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

배열에 중복을 추가하지 않고 특정 속성에 대해 한 번에 하나의 값만 가질 수있는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    사용자 정의 htmlhelper에서 "class"의 기본 속성 값을 추가하는 방법은 무엇입니까?

  2. 2

    Hyperledger Fabric-CA에서 MySQL을 db로 추가하는 방법은 무엇입니까?

  3. 3

    Angular에서 모듈의 종속성 목록에 종속성을 추가하는 방법은 무엇입니까?

  4. 4

    Gradle의 다른 종속성에 로컬 jar 종속성을 추가하는 방법은 무엇입니까?

  5. 5

    다 대다 관계의 속성에서 장고 쿼리의 값을 얻는 방법은 무엇입니까?

  6. 6

    다 대다 관계의 속성에서 장고 쿼리의 값을 얻는 방법은 무엇입니까?

  7. 7

    내 선택 상자의 각 옵션에 데이터 속성을 추가하는 방법은 무엇입니까?

  8. 8

    LDIF 파일에 objectclass 및 사용자 정의 속성을 추가하는 방법은 무엇입니까?

  9. 9

    reactjs의 자식 요소에 추가 속성을 전달하는 방법은 무엇입니까?

  10. 10

    표준 HTML 요소에 사용자 정의 속성을 추가하는 방법은 무엇입니까?

  11. 11

    모델에없는 속성을 레일의 객체에 추가하는 방법은 무엇입니까?

  12. 12

    enum 값의 추가 속성을 얻는 방법은 무엇입니까?

  13. 13

    JTree : 노드의 속성을 자체 잎으로 추가하는 방법은 무엇입니까?

  14. 14

    kotlin-multiplatform (kotlin 1.3.50)의 build.gradle.kts에 종속성을 추가하는 방법은 무엇입니까?

  15. 15

    GCP의 Dataproc 클러스터에 jar 종속성을 추가하는 방법은 무엇입니까?

  16. 16

    기존 속성의 TypeScript 인터페이스에 별칭을 추가하는 방법은 무엇입니까?

  17. 17

    Typescript의 "window"전역 개체에 "adsbygoogle"애드 센스 속성을 추가하는 방법은 무엇입니까?

  18. 18

    추가 LDAP 속성을 Glassfish의 Principal 개체에 매핑하는 방법은 무엇입니까?

  19. 19

    div 컨테이너의 이미지에 "rel"속성을 추가하는 방법은 무엇입니까?

  20. 20

    Windows 10의 드라이브 속성에 보안 탭을 추가하는 방법은 무엇입니까?

  21. 21

    배열의 각 객체에 속성을 추가하는 방법은 무엇입니까?

  22. 22

    서버의 이미지 파일에 "대체"속성을 추가하는 방법은 무엇입니까?

  23. 23

    R : 노드에서 두 개의 XML 속성을 가장 잘 추출하는 방법은 무엇입니까?

  24. 24

    neo4j에서 관계 속성에 여러 값을 추가하는 방법은 무엇입니까?

  25. 25

    Ant에서-한 속성을 다른 속성의 값으로 사용하는 방법은 무엇입니까?

  26. 26

    경로 매개 변수가 Blazor의 속성에 값을 할당하는 방법은 무엇입니까?

  27. 27

    지시문에서 "{{aaa}} / {{bbb}}"값의 속성을 가져오고 실행하는 방법은 무엇입니까?

  28. 28

    PHP에서 XML에 속성을 추가하는 방법은 무엇입니까?

  29. 29

    배열에 중복을 추가하지 않고 특정 속성에 대해 한 번에 하나의 값만 가질 수있는 방법은 무엇입니까?

뜨겁다태그

보관