撤消之前颁发的可验证凭据

使用可验证凭据时,不仅要颁发凭据, 有时还要撤销凭据。 在本文中,我们会介绍可验证凭据规范的 Status 属性部分。 我们还会更详细地介绍撤销过程,为何要撤销凭据,以及一些数据和隐私影响。

为何要撤销可验证凭据?

每个客户可能出于自身独特的原因而想要撤销可验证凭据。 下面是一些常见场景:

  • 学生 ID:学生已不是大学里的在读学生。
  • 员工 ID:员工已不是单位里的在职员工。
  • 州驾照:司机已不在该州居住。

如何撤销可验证凭据

使用可验证凭据中的索引声明,可以在门户中搜索该声明颁发的可验证凭据,并将其撤消。

  1. 以管理员用户身份(在 Azure Key Vault 上具有签名密钥权限)转到 Azure 门户中的“验证 ID”窗格。

  2. 选择可验证凭据的类型。

  3. 在最左侧菜单中,选择“撤消凭据”。

    显示凭据吊销的屏幕截图。

  4. 搜索要撤消的用户索引声明。 为声明编制索引是搜索凭据所要满足的一项要求。

    显示要撤销的凭据的屏幕截图。

    由于仅存储来自可验证凭据的索引声明哈希,因此只有完全匹配才会填充搜索结果。 使用相同算法对文本框中输入的信息进行哈希处理。 它用作搜索条件来匹配存储的经过哈希处理后的值。

  5. 找到匹配项后,选择要撤销的凭据右侧的“撤销”选项。

    执行撤销操作的管理员用户必须具有 Azure Key Vault 的签名密钥权限,否则将会显示“无法访问具有给定凭据的 Key Vault 资源”错误消息。

    显示警告的屏幕截图,该警告显示撤销之后用户仍具有凭据。

  6. 成功撤销之后会显示状态更新,页面顶部出现一个绿色横幅。

    显示已成功撤销可验证凭据消息的屏幕截图。

请求服务 API 将以 REVOKED 的形式指示presentation_verified回调中已撤销的凭据。 根据呈现请求是否指定允许呈现撤销的凭据,呈现撤销的凭据会成功或失败。

设置可撤消的可验证凭据

Microsoft Entra 验证 ID 不会存储可验证凭据数据。 颁发者需要为一个声明编制索引才能使凭据可搜索。 只能有一个已编制索引的声明,如果没有,则无法撤销凭据。 然后,对选定的要编制索引的声明进行加盐和哈希处理,且不会将其存储为其原始值。

注意

哈希是一种单向加密运算,可将名为 preimage 的输入转换为具有固定长度的名为哈希的输出。 目前无法通过计算来撤销哈希运算。

示例:在以下示例中,displayName 是索引声明。 只能通过用户的全名进行搜索。

{
  "attestations": {
    "idTokens": [
      {
        "clientId": "8d5b446e-22b2-4e01-bb2e-9070f6b20c90",
        "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"
    ]
  }
}

只能索引规则声明映射中的一个声明。 如果意外在规则定义中未提供索引声明,并且以后更正此监督,则已颁发的可验证凭据将不可搜索,因为它们在不存在索引时颁发。

撤销的工作原理是什么?

Microsoft Entra 验证 ID 实现了 W3C StatusList2021。 向请求服务 API 呈现时,API 会检查撤销状态。 撤销检查是通过对标识中心的匿名 API 调用进行的,并且不包含任何正在检查可验证凭据是否仍然有效或撤销的数据。 使用 statusList2021,Microsoft Entra 验证 ID 只需通过索引声明的哈希值保留一个标志,以跟踪撤销状态。

可验证凭据数据

在 Microsoft 颁发的每个可验证凭据中,都有一个名为 credentialStatus 的声明。 此数据是一个导航地图,显示此可验证凭据的撤销标志在数据块中的位置。

注意

如果可验证凭据已过时并且在预览期间颁发,则此声明不存在。 撤销不适用于此凭据,必须重新颁发该凭据。

...
"credentialStatus": { 
    "id": "urn:uuid:625dfcad-0000-1111-2222-333444445555?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/11111111-2222-3333-4444-000000000000"
                ],
                "origins": [ ]
             }
         }
    ],

后续步骤