当前位置: 首页 > 知识库问答 >
问题:

如何使用msp和Fabric CA-Client管理超分类帐的用户身份验证?

钦高峯
2023-03-14

我正在开发一个基于fabric 1.3的应用程序。我已经建立了一个多节点设置的网络,连接了对等体,实例化了链码,并使我的网络为调用和查询做好了准备。

现在,我正在考虑制作一个登录门户,用户可以通过它注册/注册并执行调用/查询。我的所有同行和订购者都在云上,并且正在计划使用云实例上公开的节点SDK提供这个登录特性。

我查看了官方文档:https://hyperledger-fabric-ca.readthedocs.io/en/latest/users-guide.html#registering-a-new-identity

我可以看到,我们需要fabric-ca组件来注册用户并为查询注册用户。注册后,我们在~/.hfc-key-store下得到一个证书文件。

现在我想知道我应该如何继续我的流程。

用户在网络上注册:

fabric_ca_client.register({enrollmentID: 'user1', affiliation: 'org1.department1'}, admin_user)

用户使用其机密登录:

 fabric_ca_client.enroll({enrollmentID: 'user1', enrollmentSecret: secret});
}).then((enrollment) => {
  console.log('Successfully enrolled member user "user1" ');
  return fabric_client.createUser(
     {username: 'user1',
     mspid: 'Org1MSP',
     cryptoContent: { privateKeyPEM: enrollment.key.toBytes(), signedCertPEM: enrollment.certificate }
     });
}).then((user) => {
     member_user = user;
     return fabric_client.setUserContext(member_user);

作为用户1调用/查询:

var store_path = path.join(os.homedir(), '.hfc-key-store');
Fabric_Client.newDefaultKeyValueStore({ path: store_path
        }).then((state_store) => {
            // assign the store to the fabric client
            fabric_client.setStateStore(state_store);
            var crypto_suite = Fabric_Client.newCryptoSuite();
            // use the same location for the state store (where the users' certificate are kept)
            // and the crypto store (where the users' keys are kept)
            var crypto_store = Fabric_Client.newCryptoKeyStore({path: store_path});
            crypto_suite.setCryptoKeyStore(crypto_store);
            fabric_client.setCryptoSuite(crypto_suite);
            // get the enrolled user from persistence, this user will sign all requests
            return fabric_client.getUserContext('user1', true);
        }).then((user_from_store) => {
            if (user_from_store && user_from_store.isEnrolled()) {
                console.log('Successfully loaded user1 from persistence');
                member_user = user_from_store;
            } else {
                throw new Error('Failed to get user1.... run registerUser.js');
            }..

现在,当一个用户注销时,我该怎么做呢?是否删除~/.hfc-key-store证书?因为这些证书将存储在运行节点脚本的服务器端,所以没有意义。

还有,我的流程是否正确,或者是否有更好的方法来实现我的目标?

共有1个答案

南门烈
2023-03-14

我有一个类似的登录实现,我必须执行,正如您所说的,我为每个注册用户创建了证书,并在MongoDB中存储了基本的用户信息。

我使用的流程是,一旦用户注册,就会创建用户证书,并将其登录凭据(如用户名和密码)存储在MongoDB中。

当用户尝试重新登录时,我会检查MongoDB以及认证,看看用户是否已经注册,一旦登录,用户就会拥有一个身份验证令牌,然后他可以使用该令牌与Fabric客户端交互。

 类似资料:
  • 我想使用 Firebase 构建一个 Android 应用。Firebase 提供了登录屏幕 https://github.com/firebase/firebase-login-demo-android 的演示代码。 但是,我希望用户能够使用用户已经在Android的集中式帐户管理器中输入的帐户信息,而不是让用户输入他们的帐户信息。 我已经在 https://developer.android.

  • 我需要一些有关Azure API管理服务的帮助。 目前,我们有一个单页应用程序,它使用Azure上托管的两个后端服务(WebApi.NETCore)。为了对用户进行身份验证和授权,我们使用IdentityServer(也作为服务托管在Azure上)SubscriptionService。在这里,IdSrv对用户进行身份验证,并定义webapp可以访问哪些api。如果用户拥有给定API的权限,Sub

  • 这是服务到服务身份验证中概述的规则的一个例外吗?该规则规定需要设置为接收服务的url(例如https://xxxxx.run.app)。和是一回事吗? 最后,除了使用googlecloudsdk(即imaging不存在)之外,是否还有其他方法使用用户帐户而不是服务帐户进行身份验证?

  • 问题内容: 我想在Jenkins管道中使用,因此必须首先使用Google Service帐户进行身份验证。我正在使用https://wiki.jenkins.io/display/JENKINS/Google+OAuth+Plugin,其中包含我的私钥凭据。我一直坚持将凭据加载到管道中: 我也尝试过from档案,但是没有运气。 日志显示: 问题答案: 您需要将您的“服务帐户” JSON文件作为 机

  • 我的团队目前正在开发一个应用程序,使用Admin SDK在GCP中列出公司的域用户,用于入职和非入职目的。 我们使用一个服务帐户来完成这个任务,并且在Google Admin's advanced settings中添加了 作用域。管理SDK API被激活,我们可以在凭据区域中看到服务帐户。 当我们使用参数 和 调用https://www.googleapis.com/admin/director

  • 我有一个带有AzureSQL后端的MS Access前端应用程序(accdb)。我目前正在使用SQL服务器身份验证,但我想使用某种活动目录。我没有本地广告,所以我最初考虑设置Azure广告。然而,我们的小团队已经在使用Office 365,据我所知,O365由Azure AD提供支持。 所以我的问题是,是否可以使用O365帐户(微软通常称之为“工作帐户”)来针对Azure SQL后端进行身份验证?