При попытке доступа к контексту поставщика удостоверений Hyperledger Fabri c роли и принадлежность равны нулю - PullRequest
1 голос
/ 06 августа 2020

Поток моего приложения требует, чтобы я мог проверить роль удостоверения на стороне сети. Когда я регистрирую нового пользователя, я устанавливаю его роль, принадлежность и т. Д. c. через Fabri c CA. Роль, которую я установил, похоже, действительно определяет права вызова чейнкода, но я не могу понять, как получить доступ к этой роли позже. Я попытался получить контекст пользователя от провайдера, но кажется, что поля для ролевой принадлежности и даже enrollmentSecret имеют значение null. Я приложил соответствующий код.

Я использую Node SDK для Fabri c версия 2.1.

Вот мой код для получения контекста пользователя:

 const pword = await ca.register({enrollmentID: userName, enrollmentSecret: password, role: "client", affiliation: "org1.department1"}, adminUser);
            const enrollment = await ca.enroll({enrollmentID: userName, enrollmentSecret: pword});
            const x509Identity = {
                credentials: {
                    certificate: enrollment.certificate,
                    privateKey: enrollment.key.toBytes(),
                },
                mspId: 'org0-example-com',
                type: 'X.509',
            };
            await wallet.put(userName, x509Identity);
            const targ = await wallet.get(userName);
            const user= wallet.getProviderRegistry().getProvider(targ.type);
            const targetUser = await user.getUserContext(targ, userName);
            console.log("Roles are: "+targetUser);

И это соответствующий вывод консоли:

Роли: {"name": "dave", "mspid": "org0-example-com", "roles": null, "affiliation": "" , "enrollmentSecret": "" , "enrollment": _____ (Certificate, signedKey…)

1 Ответ

0 голосов
/ 07 августа 2020

Сертификат x509, закодированный для удостоверения Fabri c, выглядит примерно так:

{"name":"user1","mspid":"Org1MSP","roles":null,"affiliation":"","enrollmentSecret":"","enrollment":{"signingIdentity":"3a18bb4555dc58717b0eaf658646ae3fd3cddf67af8b30c22880","identity":{"certificate":"-----BEGIN CERTIFICATE-----
MIICyzCCAnKgAwIBAgIUf52V2QcJWyKi2rK6FSvk/R4xnoIwCgYIKoZIzj0EA
czELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTD
biBGcmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVB
E2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNzE1MTAzODAwWhcNMjEwNzE1M
MzAwWjBgMS8wDAYDVQQLEwVhZG1pbjALBgNVBAsTBG9yZzEwEgYDVQQLEwtkZ
cnRtZW50MTEtMCsGA1UEAxMkMDAxY2EyYjEtYzY4OC0xMWVhLTk0ODItOWRlZ
MmY3MTQyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhpg1gJvE2pXahJm4d
EerQS3Z6qQ58UvFZx1l6Xa/PMeO/M1n7LUoU4BBFfrai+iH1rGDdkNFhkmfnC
lqOB9jCB8zAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADAdBgNVHQ4EF
3j1nyj0qVHWpXHLlhLdrKCV+ek4wKwYDVR0jBCQwIoAg9KIF18lr4q4BA6CIq
qIpfKcbeWbm26XKFOZ5fLNQwgYYGCCoDBAUGBwgBBHp7ImF0dHJzIjp7ImhmL
ZmlsaWF0aW9uIjoib3JnMS5kZXBhcnRtZW50MSIsImhmLkVucm9sbG1lbnRJR
IjAwMWNhMmIxLWM2ODgtMTFlYS05NDgyLTlkZWZmMDJmNzE0MiIsImhmLlR5c
OiJhZG1pbiJ9fTAKBggqhkjOPQQDAgNHADBEAiBURkhpQzHNxEz1OzqAM+eYY
nmiw+bktNnpUEySSZwIgLkcmYhJ2tNTHGMe/ArkcRdyvY2fG8gO/UAU3FKbgD
-----END CERTIFICATE-----
"}}}

Я заменил \n символом новой строки только для ясности.

Если вы заметили это, тогда вы обнаружите, что значения полей roles, affiliation, enrollmentSecret равны null или "" (пустая строка).

Теперь это просто предположение, и я могу ошибаться в этом, но я думаю, что когда мы пытаемся получить значение любого из этих полей с помощью методов getRoles, getEnrollmentSecret, getAffiliation, мы получаем значение из сертификата, который мы ' ve в нашем локальном каталоге или fabri c -store.

Я не знаю, почему эти методы вообще присутствуют в SDK, если они не обеспечивают полезного вывода.

Я столкнулся с аналогичной проблемой, когда я пытался получить значение enrollmentSecret идентификатора fabri c, но получил тот же результат, что и вы, - пустую строку. Вы можете увидеть этот поток здесь , но я не уверен, что вы можете от него что-нибудь отнять.

Я заметил одну вещь: когда мы декодируем сертификат pem любого идентификатора с помощью утилиты openssl, и мы получаем декодированный сертификат x509.

openssl x509 -in user1 -noout -text

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            3a:2e:95:d9:07:09:5b:22:a2:da:2b:e4:fd:1e:31:9e:82
    Signature Algorithm: ecdsa-with-SHA256
        Issuer: C=US, ST=California, L=San Francisco, O=org1.example.com, CN=ca.org1.example.com
        Validity
            Not Before: Jul 15 10:38:00 2020 GMT
            Not After : Jul 15 10:43:00 2021 GMT
        Subject: OU=admin, OU=org1, OU=department1, CN=user1
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:86:98:35:80:9b:c4:da:95:da:84:99:b8:76:33:
                    b0:11:ea:d0:4b:76:7a:a9:0e:7c:52:f1:59:c7:59:
                    e7:09:6b:0c:96
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier:
                DE:3D:67:CA:3D:84:B7:6B:28:25:7E:7A:4E
            X509v3 Authority Key Identifier:
                keyid:F4:A2:05:14:BF:A8:8A:5F:29:C6:DE:59:B9:B6:E9:72:85:39:9E:5F:2C:D4

            1.2.3.4.5.6.7.8.1:
                {"attrs":{"hf.Affiliation":"org1.department1","hf.EnrollmentID":"user1","hf.Type":"admin"}}
    Signature Algorithm: ecdsa-with-SHA256
         30:44:02:20:54:46:48:69:43:31:cd:c4:4c:f5:3b:3a:80:33:
         02:20:2e:47:26:62:12:76:b4:d4:c7:18:c7:bf:02:b9:1c:45:
         dc:af:63:67:c6:f2:07:14:a6:e0:0f:98

мы можем увидеть принадлежность и роль в нотации абстрактного синтаксиса, ASN.1 (1.2.3.4.5.6.7.8.1) в форме hf.affiliation и hf.type соответственно.

Теперь, если мы не декодируем сертификат x509 и не прочитаем эти значения из сертификата в нашем коде, я не думаю, что у нас есть способ получить эти значения. Конечно, если вы просто хотите считать значения статически, вы можете сделать это с помощью утилиты fabric-ca-client, но я предполагаю, что здесь это не так.

Эта проблема возникла в SDK v1.4 как хорошо. Теперь я не знаю, было ли это преднамеренное действие, чтобы предотвратить некоторую ошибку безопасности fl aws или что-то еще, но, как ни странно, я никогда не видел, чтобы кто-либо fabri c комментировал это.

В моем исследовании , Я нашел эту ссылку , где человек столкнулся с той же проблемой, но и на нее нет ответа.

...