1. 可验证声明
可验证声明(Verifiable Claim
,简称Claim
),是发证方
使用自己的 DID 给用户
的 DID 的某些属性做背书而签发的描述性声明,并附加自己的数字签名,可以认为是一种数字证书。
发证方
的 DID 是做背书的,签发出来的Claim
我们称之为:Proof Claim
。- 如果
发证方
就是用户
自己,即一个 DID 对自己签发Claim
,我们称之为:Profile Claim
。
2. Proof Claim
我们设计如下Proof Claim
:
{
"@context": [
"https://www.w3.org/2018/credentials/v1"
],
"id": "xxxxx",
"type": [
"ProofClaim"
],
"issuer": "did:ccp:7f8ca8982f6cc6e8ea087bd9457ab8024bd2",
"issuanceDate": "2017-04-01T12:01:20Z",
"expirationDate": "2017-04-01T12:01:20Z",
"credentialSubject": {
"id": "did:ccp:97c30de767f084ce3080168ee293053ba33b235d71",
"shortDescription": "xxx",
"longDescription": "xxx",
"type": "xxx"
},
"revocation": {
"id": "https://example.com/v1/claim/revocations",
"type": "SimpleRevocationListV1"
},
"proof": [
{
"creator": "did:ccp:7f8ca8982f6cc6e8ea087bd9457ab8024bd2/1",
"type": "Secp256k1",
"signatureValue": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19"
}
]
}
其中,
id
:claim 的唯一 id,要求在发证方唯一即可,用于在发证方内唯一标识此 claimtype
:claim 所属大类的类型:ProofClaim
,ProfileClaim
issuer
:签发 Claim 的 发证方的 DIDproof
:签名相关内容revocation
:定义了查询 claim 吊销列表的地址
其中 credentialSubject
中的内容定义了发证方声明的内容:
id
:被签发方的 DIDshortDescription
:简短的描述longDescription
:详细的描述type
:claim 的类型
设计 claim 支持如下类型:
RealNameAuthentication
:实名认证FingerprintAuthentication
:指纹认证EnterpriseAuthentication
:企业认证BusinessAuthentication
:商户认证VIPAuthentication
:大客户认证
Claim 设计举例:百度云企业认证 Claim
假设发证方是百度,颁发的 claim 是百度云企业认证
,则设计如下 claim:
{
"@context": [
"https://www.w3.org/2018/credentials/v1"
],
"id": "9a2abb48-20d6-4308-bf52-61c868a8b090",
"type": [
"ProofClaim"
],
"issuer": "did:ccp:4GQRdctGMEwueArfykURe8rkNyRw",
"issuanceDate": "2019-09-02T05:34:46.586Z",
"expirationDate": "2066-01-02T15:04:05.999Z",
"credentialSubject": {
"id": "did:ccp:raMWmi1LEpCeoxzb7atmSNbkozc",
"shortDescription": "百度云企业认证",
"longDescription": "本DID已通过百度云企业认证。",
"type": "EnterpriseAuthentication"
},
"revocation": {
"id": "https://did.baidu.com/v1/claim/revocations",
"type": "SimpleRevocationListV1"
},
"proof": [
{
"creator": "did:ccp:4GQRdctGMEwueArfykURe8rkNyRw/1",
"type": "Secp256k1",
"signatureValue": "3044022051757c2de7032a0c887c3fcef02ca3812fede7ca748254771b9513d8e2bb"
}
]
}
用户(DID:did:ccp:raMWmi1LEpCeoxzb7atmSNbkozc
)可以通过此声明来证明自己是百度云的企业认证客户。
2.1. 用户申请 Proof Claim
用户申请 claim 是需要提供材料的,发证方的 endpoint 连同所需的材料清单一同注册在 发证方注册中心
内。
设计预定义材料:
/*
* string
*/
Name = "Name" // 姓名
Gender = "Gender" // 性别
MaritalStatus = "MaritalStatus" // 婚姻状况
Birthday = "Birthday" // 生日
PlaceOfBirth = "PlaceOfBirth" // 出生地
MobilePhone = "MobilePhone" // 电话
WorkPhone = "WorkPhone" // 工作电话
PersonalEmail = "PersonalEmail" // 个人邮箱
WorkEmail = "WorkEmail" // 工作邮箱
HighestEducationDegree = "HighestEducationDegree" // 最高学历
CompanyAddress = "CompanyAddress" // 公司地址
CompanyName = "CompanyAddress" // 公司名称
HomeAddress = "HomeAddress" // 家庭地址
AddressLine = "AddressLine" // 详细地址
City = "City" // 城市
Country = "Country" // 国家
DriverLicense = "DriverLicense" // 驾驶证ID
PassportID = "PassportID" // 护照号码
SocialSecurityNumber = "SocialSecurityNumber" // 社保号
/*
* images
*/
Photo = "Photo" // 照片
IDCard = "IDCard" // 身份证照片,正反面
设计自定义材料:
const (
// DataType
TextDataType = "text" // 文本
ImageDataType = "images" // 图片
VoiceDataType = "voice" // 声音
VideoDataType = "video" // 视频
)
type OtherData struct {
Name string `json:"name"` // 材料名称
Type string `json:"type"` // 材料类型
ShortDescription string `json:"shortDescription"` // 材料概述
LongDescription string `json:"longDescription"` // 材料详细说明
}
详见:成为发证方
2.2. 发证方签发 Proof Claim
2.3. Proof Claim 的吊销
对于可吊销的 claim 所保存的信息里需要包括吊销方式的字段,里面需要有查询 claim 吊销状态的 endpoint,验证 claim 时,需要通过该 endpoint 来验证 claim 是否吊销。如果需要支持 claim 的吊销,DID 账户所有者需要自己维护一个提供获取吊销列表的 endpoint。
Revocation Service 是一个提供吊销管理的服务,用户可以自己部署可以选择托管部署在百度的平台上。当部署在百度的平台上时,百度可以把这个服务设计成一个合约。
3. Profile Claim
Profile Claim
是一个 DID 对自己的某些属性签发的可验证声明。
4. 第三方 app 请求 claim
5. claim 的验证
6. 从 Identity Hub 中获取 claim
7. DID + Claim Workflow
DID 可以用作统一登入,也可以用来统一认证。第三方 App 接入 DID 做统一登入时,对原有账号体系的破坏可能很大;而做统一认证时,接入成本比较低。
使用 DID 时,无论是统一登入还是统一认证,其内部的实际工作流程都是一样的:
- 先验证 DID
- 再验证 Claim
8. 在 App 中使用 DID 做统一登入/统一认证
注:
- Identity Hub、Claim Issuer Registry、Claim Revocation Service 都假定托管在 DID Service 这个统一平台上