运行 Identity Hub

前置条件

Identity hub 运行依赖以下组件

  • mongodb v3.0.0及以上版本
  • node.js v10.0.0及以上版本

配置文件

首先需要注册一个 hub did,注册方法可以参考 SDK 的使用

didctl create did

注册后拥有能够被 Baidu resolver 解析的 did 以及对应的私钥 blk(十六进制字符串,不包含开头的0x)。

一份标准的 JSON 配置文件如下:

{
    "port": 8060,
    "path": "/v1/identity-hub",
    "universalResolverUrl": "https://did.baidu.com",
    "useBaiduResolver": true,
    "hubDID": "did:ccp:4XF8B3KS7NBp3KhqjZZyBRow2pUu",
    "privateKey": "7a0ebc22eb2d179302e11e78a3aecdf14ddfdbd2e5086c7847245c220d46c4e1",
    "mongoUrl": "mongodb://localhost:27017"
}

主要包括以下几个配置: * port: hub 监听端口 * path: hub 监听路径 * universalResolverUrl: resolver 解析地址,可以配置为uniresolver 或者Baidu resolver,uniresolver 会连接 Baidu resolver,但是 uniresolver 的稳定性无法保障 * useBaiduResolver: 是否使用Baidu resolver进行解析 * hubDID: hub 服务的 DID * privateKey: hubDID 对应的私钥(mainPrivateKey) * mongoUrl: mongodb 连接地址(使用 mongodb 不支持 hub 之间同步)

一份标准的配置文件如 config 所示。

运行

  1. 首先启动 mongodb
  2. 配置 hub 的 app.json 文件
  3. 运行如下指令启动 hub
npm install

npm start

当显示如下信息时表示 hub 成功启动:

[2020-01-13 15:10:59.368 +0800] INFO  Identity hub started! (xxx/identity-hub/app.js)
[2020-01-13 15:10:59.378 +0800] INFO  Identity hub running on http://127.0.0.1:8060/v1/identity-hub (xxx/identity-hub/lib/server.js)

日志的级别可以使用LOG_LEVEL来设置,有以下几个级别 error、warn、info、debug、trace,默认为trace

hub 运行之后可以使用 @baidu/hub-sdk-js 与 hub 进行交互,开发示例参考app.test.js

目前百度开放的 hub测试地址为:https://did.baidu.com/v1/identity-hub hub did:did:ccp:LBGsiwfDXNR7z6nQHGQ9mcLcjKV

发现 hub

百度提供的 hub 服务节点的 DID Document 中会包含以下 Service 内容,表示自己提供Identity hub 服务,包含服务名称、服务节点地址等信息。

"service": [{
  "type": "IdentityHub",
  "publicKey": "did:ccp:LBGsiwfDXNR7z6nQHGQ9mcLcjKV#keys-1",
  "serviceEndpoint": {
    "@context": "https://schema.identity.foundation/hub",
    "@type": "BaiduHubServiceEndpoint",
    "locations": ["https://did.baidu.com/v1/identity-hub"]
  }
}]

而用户使用百度 Identity hub 时,只需要在自己的 DID Document 中添加如下的 service 字段:

"service": [
      {
        "id": "did:ccp:yourDID#hub",
        "type": "IdentityHub",
        "serviceEndpoint": {
          "@context": "https://schema.identity.foundation/hub",
          "@type": "UserHubEndpoint",
          "instance": [
            "did:ccp:LBGsiwfDXNR7z6nQHGQ9mcLcjKV"
          ]
        }
      }
    ]

其中 instance 表示用户使用了哪些 hub 实例。

获取 Hub 服务地址的流程如下:

  1. 首先用户根据自己的 DID 从 resolver 中获取 DID Document
  2. 从DID Document 中的 service 字段获取自己使用的 Hub DID
  3. 从 resolver 中获取 Hub 的 DID Document
  4. 从 Hub DID Document 中的 service 中获取 locations 表示的 http 服务地址