最近在搭建自己数据空间的CA认证中心,这是Eclipse数据空间做的内容,纯搬运用于记录。
一、简介
( Identity Hub
IH) 管理数据空间中的身份资源。具体来说,它提供两种服务:
- 凭证服务(CS)。CS 管理可验证的凭证。这包括可验证演示(VP)和可验证凭证(VC)的读取和写入端点。
- DID 服务(DIDS)。DIDS 负责参与者 DID 的创建、管理和解析。
1.2. EDC基金会
Identity Hub 使用 EDC 模块化和可扩展性系统构建。它还依赖于核心 EDC 组件,例如加密原语、Json-Ld 处理和 DID 解析。
EDC 模块化和可扩展性系统支持灵活的部署拓扑,其中 Identity Hub 服务可以并置在同一进程中,也可以分布在不同的集群中。例如,可以将所有三个 IH 服务(STS、CS 和 DIDS)部署为单个单元,或将它们分离为单独管理的服务。
1.3. 部署拓扑
将支持两种部署拓扑:
- 嵌入式:Identity Hub 可以嵌入 EDC 控制平面运行时中
- 独立:Identity Hub可以部署为单个或集群独立运行时
1.4. 关键用例
- 发起和管理凭证请求
- 服务副总裁
- 监控和管理重新发行
- 管理 DID、DID 文档资源和 DID 文档发布
2. 架构概念
2.1. 参与者的背景
参与者上下文 (PC) 充当identity resources
Identity Hub 中的管理和控制单元。所有资源均通过 PC 包含和访问。上下文与DSP 规范中定义的参与者身份相关联,并通过IH 管理 API创建。
公共客户端 API 端点的访问控制仅限于特定 PC。例如,基本身份协议规范中定义的访问令牌与特定上下文相关联,并且不能用于访问另一个上下文中的资源。
身份资源的生命周期与其包含的上下文绑定;如果 PC 被移除,此操作将级联到所有包含的资源。
服务可以注册以接收参与者上下文事件,例如,当创建或删除上下文时。
2.2. 身份资源
Anidentity resource
可以是attestation
、cryptographic material
或identifier
与数据空间参与者关联的 。A Verifiable Credential
(VC)、DID
、 和DID Document
是身份资源。
2.2.1. 可验证的凭证资源
A VerifiableCredentialResource
(VCR) 是一种类型identity resource
,将存储在持有者一侧:
class VerifiableCredentialResource implements IdentityResource {
String id;
long timestamp;
VcState state;
String issuerId;
String holderId;
Policy issuancePolicy;
Policy reissuancePolicy;
VerifiableCredential verifiableCredential;
}
是issuerId
一个URN
(通常是 DID),可以解析它以返回凭证颁发者的服务端点。
和字段是凭证颁发者根据 VPP 规范提供的策略issuancePolicy
。它们用于确定启动流程所需的 VC 或其他先决条件。reissuancePolicy
ODRL
和字段用于确定资源何时进入特定状态,例如何时请求资源state
。timestamp
在发行人上,已发行的 VC 的记录如下所示:
class VerifiableCredentialRecord {
VcState state; //
String credentialType; // what VC was issued
String holderId; //who the VC was issued to
long expiryDate; // when the VC will expire
Long renewalDateSent; // non-null if a credential offer request was sent
}
凭证状态定义如下
enum VcState {
INITIAL, REQUESTING, REQUESTED, ISSUING, ISSUED, REISSUE_REQUESTING, REISSUE_REQUESTED, TERMINATED, ERROR
}
2.2.1.1 可验证凭证管理器
( VCM VerifiableCredentialManager
)VerifiableCredentialResources
跨参与者上下文进行管理。例如,它监视未完成的请求并启动重新发布流程。VCM 具有集群感知能力,并保证只有一个流对所有运行时实例中的特定 VCR 有效。
服务可以注册以接收VerifiableCredentialManager
事件,例如,当启动流时。
2.2.3. 密钥对资源
A是管理公钥/私钥对KeyPairResource
的类型:identity resource
class KeyPairResource {
String id;
String groupName;
String name;
KeyPairState state;
long timestamp;
boolean defaultPair;
long useDuration;
long rotationDuration;
PublicKey publicKey;
String privateKeyId;
}
请注意,该资源也将被Issuer Service
对于参与者上下文的所有实例来说必须id
是唯一的,并且理想情况下应该是 GUID。
标识groupName
密钥对属于哪个组。其他服务可以配置一个组来指示在签名证明时使用哪个密钥对。一个组中只能有一个人KeyPairResource
处于活动状态。不活跃的KeyPairResource
被轮换或撤销。
该name
属性是该对的一个用户友好的名称。
如果在未指定特定密钥defaultPair
对时应使用密钥对对资源进行签名,则该属性设置为 true。
指定useDuration
密钥对ACTIVATED
在轮换开始之前应处于该状态的时间(以毫秒为单位)。如果-1
,则持续时间不确定,并且必须手动触发轮换。
指定在开始撤销之前rotationDuration
密钥对应处于该状态的时间(以毫秒为单位) 。ROTATED
如果-1
,则持续时间不确定,并且必须手动触发撤销。
KeyPair状态定义如下:
enum KeyPairState {
INITIAL, ACTIVATED, ROTATED, REVOKED, ERROR
}
2.2.3.1. 密钥对管理器
( KPM KeyPairManager
)KeyPairResources
跨参与者上下文进行管理。例如,它监视何时需要轮换和撤销密钥。KPM 具有集群感知能力,并保证只有一个流对所有运行时实例中的特定流有效KeyPairResource
。
服务可以注册以接收KeyPairManager
事件,例如,当启动轮换或撤销时。
2.2.4. DID 资源
ADIDResource
是文档DID
中的 a 和相关条目DID
。它代表 IdentityHub 中 DID 文档的生命周期。
class DidResource {
String did;
DidState state;
long stateTimestamp;
long createTimestamp;
DidDocument document;
}
class VerificationRelationship {
RelationshipType type;
List<String> methods;
}
是在连接器存储库中定义的,是W3C DIDDidDocument
的表示。
2.2.5。DID出版商
负责DidPublisher
生成DidResource,
符合 W3C 标准的DID Document
并将其发布到Verifiable Data Registry
(VDR)。例如,实现可以发布到 CDN。例如,当参与者上下文被删除时,它还DidPublisher
负责取消发布。DID Documents,
我们需要创建一个具有集群意识且高性能的发布者作为一个
out-of-the-box
选项。一种解决方案是发布到数据库,并在每个运行时上拥有本地缓存,定期刷新内存中的版本。
2.3. 可验证的演示生成
当请求 VP 时,VerifiablePresentation
将通过 VC 从 VC 创建VP VerifiablePresentationGenerator
。生成器负责组装 VP(可能来自多个 VC)并创建证明。
TODO弄清楚如何选择证明类型并可能委托给
ProofGenerator
TODO研究生成器如何使用 DIF Presentation Exchange 来生成 VP
2.4. 授权
2.4.1. 保安编码器服务
安全令牌服务是负责根据基本身份协议IdentityService
创建自发行令牌的实现。
VP Access Token
创建自发行令牌时,STS 将支持使用[基本身份协议]]()中指定的范围方案创建。访问令牌的范围始终限于参与者上下文。
2.4.2. 授权服务
授权AuthorizationService
对凭证资源的读写请求。它建立在策略引擎之上。
AccessDefinitions
指定一组资源的访问策略,由ResourceType
. 多个AccessDefinitions
可以选择同一个资源;在这种情况下,必须满足所有AccessDefinition
策略才能获得对资源的访问权限。如果未AccessDefinitions
选择资源,则客户端无法通过读取或写入 API 访问该资源。
public class AccessDefinition {
List<Criterion> resourcesSelector;
List<String> operations;
Policy policy;
}
TODO 写访问是否应该有策略约束并且始终需要写令牌?这可以通过在启动时注册(基于配置)的通配符 AccessDefinition 来完成。请注意,不应进行读取访问,因为某些资源应该是公共的。但是,对于 CX,大多数类型都需要读取令牌。
2.5. 管理API
执行Management API
授权的客户端请求,以针对 Identity Hub 安装执行操作任务。操作分为两类:那些需要影响整个安装的提升权限的操作,以及那些仅限于特定参与者上下文的操作。
请注意,身份中心将不包括管理 UI 或操作员身份验证。预计部署环境将为映射到两种操作类型之一的操作员提供自己的身份验证/授权服务以及用于发起请求的 UI。
3.身份中心模块和服务
下图描述了 Identity Hub 模块依赖关系图:
该术语installation
用于表示作为一个单元运行的 Identity Hub 部署。Aninstallation
可以是单个运行时实例或实例集群。
3.1. 管理接口
它Management API
执行授权的客户端请求,以针对 Identity Hub 安装执行操作任务。
3.1.1. 提升权限操作
这些操作需要superuser
访问权限,包括:
- 创建/删除/列出参与者上下文
- 生成新的参与者上下文和授权密钥
3.1.2. 参与者上下文操作
这些操作的范围仅限于参与者上下文,并且需要 API 密钥:
- 轮换/撤销密钥
- 创建DID和DID文档
- 添加DID元素(验证方法等)
- 发布DID
- 列出可验证的凭据
- 通过id删除可验证的凭证
- 按类型删除可验证的凭据
- 启动密钥轮换/撤销
所有操作都会发布事件。
3.2. 集线器API
这Hub API
是一个用于外部客户端的 API,用于实现Verifiable Presentation Protocol
(VPP) 和Credential Issuance Protocol
(CIP)。它包括以下操作:
- 编写可验证的凭证 (VPP)
- 提供可验证的副总裁 (VPP) 证书
- (支持演示交流)
- 按 ID 或类型解析可验证凭证 (VPP)
- (范围/演示查询)(VPP)
- 获得证书录取通知书 (CIP)
3.3. 综合服务
聚合服务执行涉及跨模块服务编排的操作。
3.3.1 参与者服务
协调ParticipantService
参与者上下文状态变化和资源。它执行以下操作:
3.3.1.1 初始化
基于 a 初始化上下文和包含的资源ParticipantManifest
,包括:
- 生成密钥对
- 创建DID并生成文档
- 激活上下文,包括发布 DID 文档(可选)
- 将结果发送到异步回调目标,该目标可以是端点或异步 servlet 响应
3.3.1.1 停用
删除上下文和所有包含的资源,将结果发送到异步回调目标,该目标可以是端点或异步 Servlet 响应。
3.3.2 报价处理器
报价处理者收到Credential Offer
(CIP) 并执行以下操作之一:
- 如果
VC Resouce
优惠存在(类型和颁发者),并且资源配置为自动续订,则处理器会发起重新颁发请求 - 否则,如果配置了优惠回调,它将调用回调端点。回调机制使用 EDC 提供的回调基础设施。
- 否则,它会忽略该请求
3.3.3 密钥服务
提供KeyService
以下操作。
3.3.3.1. 回转
a 的密钥轮换KeyPairResource
执行如下:
- 创建一个新的并与正在旋转的
KeyPairResource
相同关联groupName
KeyPairResource
- 轮换的私钥
KeyPairResource
被破坏。 - 添加了一种新的验证方法,使用
DidDocumentService
. - DID 文档已(可选)发布。如果轮换与撤销一起执行,则可能无法执行发布(见下文)。
3.3.3.1. 撤销
a 的密钥撤销KeyPairResource
执行如下:
- 必须
KeyPairResource
处于 ROTATED 状态并转换为 REVOKED 状态。 verificationMethod
与撤销关联的是KeyPairResource
使用 删除的DidDocumentService
。- DID 文件已发布。
3.4. 参与者背景
该Participant Context
模块负责管理参与者上下文及其包含的资源的生命周期。每个上下文都与一个dataspace participant id
.
该模块:
- 为创建的上下文提供持久存储。
- 生成并存储 API 访问令牌
- 发出其他系统可以侦听的以下生命周期事件的上下文事件:
- 已创建
- 活性
- 被毁
3.5. 可验证凭证模块
可验证凭证模块管理 VC 资源。所有资源操作的范围仅限于当前参与者上下文。该模块包含以下服务。
3.5.1.凭证服务
负责CredentialService
凭证 CRUD 操作。它委托给 aCredentialStore
以实现持久性。
所有 CRUD 操作都会发布事件。
3.5.2. 可验证的演示服务
负责VerifiablePresentationService
委托给生成器,生成器从 (VC) 生成可验证的演示文稿 (VP)。
3.5.3. 凭证请求管理器
管理CredentialRequestManager
VC 资源。它RemoteMessageDispatcher
使用Credential Issuance Protocol
. 它跨参与者上下文运行并更新资源状态。例如,CredentialRequestManager
处理VC发行请求和重新发行请求。
它
CredentialRequestManager
是集群感知的,并且将通过锁定保证操作不会在节点之间重复。
将CredentialRequestManager
委托给 EDC,PolicyEngine
以确保在作为发行者请求的一部分生成自发行 ID 令牌时对issuancePolicy
和进行评估。reissuancePolicy
请求操作发布事件。
3.5.4. 凭证库
从持久存储中序列CredentialStore
化(反序列化)VC 资源。
3.6. DID模块
DID 模块管理参与者上下文的 DID 和 DID 文档。可以针对特定参与者上下文禁用 DID 模块。DID 模块利用 EDCIdentity DID Core
扩展。
3.6.1. 是否有文档发布者
负责DidDocumentPublisher
生成、发布和取消发布 DID 文档到Verifiable Data Registry
(VDR),例如服务于 Web 域的 CDN。发布者可以按如下方式进行转换:
- 发布:生成 -> 已发布
- 取消发布:已发布 -> 未发布
所有操作都会发布事件。
每个 DID 方法只能有一个发布者,所有可用的发布者都保存在 中DidPublisherRegistry
,可用于通过扩展机制贡献发布者。
3.6.2. 是否有文档服务
将托管DidDocumentService
DID 文档返回给请求客户端。请注意,它不 解析外部 DID 文档。另请注意,此服务仅供内部使用。DID 解析应通过直接与 VDR 配合使用的特定 DID 方法来执行。
DidDocumentService
内部使用DidResourceStore
。
3.7. 授权/权限模块
该Auth/Permission
模块包括委托给 EDCPolicyEngine
进行访问控制的服务。
3.8. 密钥对模块
该Key Pair
模块KeyPairResources.
通过使用可查询属性的数据库存储和敏感材料(私钥)的安全保管库来管理它。密钥对模块将与Issuer Service
.
3.9. 加密核心库
它crypto core library
是核心 EDC 的一部分,将由 Identity Hub 服务使用。
3.10. Identity DID核心模块
该模块是核心 EDC 的一部分,将由 Identity Hub 服务使用。