作为使用可验证凭据过程的一部分,你需要颁发凭据,有时还需要撤销凭据。 在本文中,我们会介绍可验证凭据规范的 Status 属性部分。 我们还会更详细地介绍撤销过程,为何要撤销凭据,以及一些数据和隐私影响。
为何吊销可验证凭据?
每个客户可能出于自身独特的原因而想要撤销可验证凭据。 以下是一些常见方案:
- 学生 ID:学生已不是大学里的在读学生。
- 员工 ID:员工已不是单位里的在职员工。
- 州驾照:司机已不在该州居住。
撤销的工作原理是什么?
Microsoft Entra 验证 ID 实现了 W3C StatusList2021。 向请求服务 API 呈现时,API 会检查撤销状态。 撤销检查是通过对标识中心的匿名 API 调用进行的,并且不包含任何正在检查可验证凭据是否仍然有效或撤销的数据。 使用 statusList2021,Microsoft Entra 验证 ID 只需通过索引声明的哈希值保留一个标志,以跟踪撤销状态。
可验证凭据数据
在 Microsoft 颁发的每个可验证凭据中,都有一个名为 credentialStatus 的声明。 此数据是一个导航地图,显示此可验证凭据的撤销标志在数据块中的位置。
...
"credentialStatus": {
"id": "urn:uuid:00aa00aa-bb11-cc22-dd33-44ee44ee44ee?bit-index=31",
"type": "RevocationList2021Status",
"statusListIndex": 31,
"statusListCredential": "did:web:verifiedid.contoso.com?service=IdentityHub&queries=...data..."
...
颁发者标识中心 API 终结点
在颁发方的分散式标识符文档中,标识中心的终结点可在 service 部分找到。
"didDocument": {
"id": "did:web:verifiedid.contoso.com",
"@context": [
"https://www.w3.org/ns/did/v1",
{
"@base": "did:web:verifiedid.contoso.com"
}
],
"service": [
{
"id": "#linkeddomains",
"type": "LinkedDomains",
"serviceEndpoint": {
"origins": [
"https://verifiedid.contoso.com/"
]
}
},
{
"id": "#hub",
"type": "IdentityHub",
"serviceEndpoint": {
"instances": [
"https://verifiedid.hub.msidentity.com/v1.0/00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
],
"origins": [ ]
}
}
],
创建可撤销的可验证凭据
Microsoft Entra 验证 ID 不会存储可验证凭据数据。 颁发者需要为一个声明编制索引才能使凭据可搜索。 只能有一个已编制索引的声明,如果没有,则无法撤销凭据。 然后,对选定的要编制索引的声明进行加盐和哈希处理,且不会将其存储为其原始值。
注意
哈希是一种单向加密运算,可将名为 preimage 的输入转换为具有固定长度的名为哈希的输出。 目前无法通过计算来撤销哈希运算。
示例:在以下示例中,displayName 是索引声明。 只能通过用户的全名进行搜索。
{
"attestations": {
"idTokens": [
{
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"configuration": "https://didplayground.b2clogin.com/didplayground.onmicrosoft.com/B2C_1_sisu/v2.0/.well-known/openid-configuration",
"redirectUri": "vcclient://openid",
"scope": "openid profile email",
"mapping": [
{
"outputClaim": "displayName",
"required": true,
"inputClaim": "$.name",
"indexed": true
},
{
"outputClaim": "firstName",
"required": true,
"inputClaim": "$.given_name",
"indexed": false
},
{
"outputClaim": "lastName",
"required": true,
"inputClaim": "$.family_name",
"indexed": false
}
],
"required": false
}
]
},
"validityInterval": 2592000,
"vc": {
"type": [
"VerifiedCredentialExpert"
]
}
}
重要说明
仅可在规则声明映射中为一个声明编制索引。 如果在规则定义中意外没有已索引的声明,并且以后更正了此疏忽,那么在更改之前颁发的所有可验证凭据都不可搜索,因为它们是在缺少索引的情况下颁发的。
如何撤销可验证凭据
可以在可验证凭据中使用索引声明来搜索已颁发的可验证凭据以及撤销它们。
以管理员用户身份(在 Azure 密钥保管库上具有签名密钥权限)转到 Azure 门户中的已验证 ID 窗格。
选择可验证凭据的类型。
在最左侧菜单中,选择“撤消凭据”。
搜索要撤消的用户索引声明。 为声明编制索引是搜索凭据所要满足的一项要求。
重要说明
我们仅存储索引声明的哈希版本。 这意味着只有与存储在索引声明中的值完全匹配的值才有效。 在文本框中输入信息时,系统会使用相同的算法对信息进行哈希处理。 然后,此哈希值用于搜索存储的哈希声明的匹配项。 如果未找到匹配项,你可能输入了错误的信息,或者声明可能没有被编入索引。
找到匹配项后,选择要撤销的凭据右侧的撤销选项。
执行撤销操作的管理员用户需要在 Azure 密钥保管库上具有签名密钥权限,否则将收到错误消息“无法访问具有给定凭据的密钥保管库资源”。
成功撤销之后会显示状态更新,页面顶部出现一个绿色横幅。
请求服务 API 将以 REVOKED 的形式指示presentation_verified回调中已撤销的凭据。 根据呈现请求是否指定允许呈现撤销的凭据,呈现撤销的凭据会成功或失败。