运行 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 所示。
运行
- 首先启动 mongodb
- 配置 hub 的 app.json 文件
- 运行如下指令启动 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 服务地址的流程如下:
- 首先用户根据自己的 DID 从 resolver 中获取 DID Document
- 从DID Document 中的 service 字段获取自己使用的 Hub DID
- 从 resolver 中获取 Hub 的 DID Document
- 从 Hub DID Document 中的 service 中获取 locations 表示的 http 服务地址