Hyperledger Fabri c Импорт удостоверений в InMemoryWallet - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь импортировать идентификаторы уже зарегистрированных пользователей в InMemoryWallet. Основная идея заключается в том, чтобы импортировать пользователей из внешнего источника, когда это необходимо приложению (например, БД, в которой хранится вся необходимая информация, например, сертификаты и закрытые ключи для каждого пользователя), чтобы избежать хранения файлов в FS. И загрузить admin личность, когда мое приложение запустилось. Но не повезло с этим.

// Here I'm using data from wallet files which was created after enroll of admin user
const cert = '-----BEGIN CERTIFICATE-----certificatestring-----END CERTIFICATE-----'
const pk = '-----BEGIN PRIVATE KEY-----privatekeystring-----END PRIVATE KEY-----'
const adminName = 'admin'

adminIdentity = X509WalletMixin.createIdentity('Org1MSP', cert, pk);
wallet = new InMemoryWallet()

await wallet.import(adminName, adminIdentity)

const adminExists = await wallet.exists(adminName);
console.log('adminExists', adminExists) --> Exists!!!
await gateway.connect(ccpPath, { wallet, identity: adminName, discovery: { enabled: true, asLocalhost: true } });
ca = gateway.getClient().getCertificateAuthority();
adminIdentity = gateway.getCurrentIdentity();

// Trying to create User
const userId = 'someId'
const secret = await ca.register({ affiliation: 'org1.department1', enrollmentID: userId, role: 'client' }, adminIdentity);
const enrollment = await ca.enroll({ enrollmentID: userId, enrollmentSecret: secret });
const userIdentity = X509WalletMixin.createIdentity('Org1MSP', enrollment.certificate, enrollment.key.toBytes());
await wallet.import(userId, userIdentity);

UPD: При выполнении я получаю эту ошибку: (node:85462) UnhandledPromiseRejectionWarning: Error: fabric-ca request register failed with errors [[{"code":20,"message":"Authentication failure"}]]

Но когда я делаю то же самое с FileSystemWallet все работает как и ожидалось ....

Ответы [ 2 ]

1 голос
/ 22 января 2020

Проблема в том, что эта строка здесь

wallet.import(adminName, adminIdentity)

это асинхронный c метод, поэтому вы должны сделать

await wallet.import(adminName, adminIdentity)
0 голосов
/ 24 января 2020

Проблема была в формате сертификата и закрытого ключа. Следует использовать «как есть». Со всеми сгенерированными переносами строк.

-----BEGIN CERTIFICATE-----\nMIICAjCCAaigAwIBAgIUBrQKwHNcJLbF52MaYWh29/9UJRgwCgYIKoZIzj0EAwIw\nc...;
...LSdWpObOxeh\r\n-----END PRIVATE KEY-----\r\n;"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...