吊销可验证凭据
在使用可验证凭据的过程中,你需要颁发凭据,有时又需要撤销凭据。 在本文中,我们会介绍可验证凭据规范的 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 Key Vault 上具有签名密钥权限)转到 Azure 门户中的“验证 ID”窗格。
选择可验证凭据的类型。
在最左侧菜单中,选择“撤消凭据”。
搜索要撤销的用户索引声明。 为声明编制索引是搜索凭据所要满足的一项要求。
重要
我们仅存储索引声明的哈希版本。 这意味着仅索引声明中存储的值的完全匹配项才可行。 在文本框中输入信息时,系统会使用相同的算法对信息进行哈希处理。 然后,此哈希值用于搜索存储的哈希声明的匹配项。 如果未找到匹配项,则可能输入了错误的信息,或者声明可能未编制索引。
找到匹配项后,选择要撤销的凭据右侧的“撤销”选项。
执行撤销操作的管理员用户必须具有 Azure Key Vault 的签名密钥权限,否则将会显示“使用给定凭据无法访问 Key Vault 资源”错误消息。
成功撤销之后会显示状态更新,页面顶部出现一个绿色横幅。
请求服务 API 以 presentation_verified
的形式指示 REVOKED
中已撤销的凭据。 根据呈现请求是否指定允许呈现撤销的凭据,呈现撤销的凭据会成功或失败。