你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

注意

Azure Active Directory 可验证凭据现已是 Microsoft Entra 验证的 ID,并且属于 Microsoft Entra 系列产品。 详细了解标识解决方案 Microsoft Entra 系列,并开始使用统一 Microsoft Entra 管理中心

使用可验证凭据 (VC) 时,不仅要颁发凭据,还要撤销凭据。 本文详细介绍了 VC 规范的 Status 属性部分,同时进一步讲解撤销过程、可能想要撤销凭据的原因以及以及一些数据和隐私影响。

为何想撤销可验证凭据?

客户会因为不同的原因撤销可验证凭据,一些常见原因如下。

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

如何撤销可验证凭据

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

  1. 以管理员用户身份(在 Azure KeyVault 上具有签名密钥权限)导航到 Azure 门户中的“验证 ID”边栏选项卡。

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

  3. 在左侧菜单中,选择“撤消凭据”Revoke a credential

  4. 搜索要撤消的用户索引声明。 如果还没有为声明编制索引,则搜索将不起作用,并且你将无法撤销可验证凭据。

    要撤销的凭据的屏幕截图

    注意

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

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

    注意

    执行撤销操作的管理员用户需要在 Azure KeyVault 上具有“签名”密钥权限,否则将收到错误消息“无法访问具有给定凭据的 KeyVault 资源”

    警告消息的屏幕截图,告知撤销之后用户仍具有凭据

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

    “成功撤销可验证凭据”消息的屏幕截图

现在,每次向请求服务 API 发送出示时,都会检查 VC 是否已撤销。

如何设置可撤消的可验证凭据

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

注意

哈希是一种单向加密运算,可将名为 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 的声明。 此数据是一个导航地图,显示此 VC 的撤销标志在数据块中的位置。

注意

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

...
"credentialStatus": { 
    "id": "urn:uuid:625dfcad-0000-1111-2222-333444445555?bit-index=31", 
    "type": "RevocationList2021Status", 
    "statusListIndex": 31, 
    "statusListCredential": "did:ion:EiDR0Y6zfvnUy2NjO293XNfe9AOL...<SNIP>...?service=IdentityHub&queries=...data..." 
...

颁发者标识中心 API 终结点

在颁发方的 DID 文档中,标识中心的终结点可在 service 部分找到。

didDocument": {
    "id": "did:ion:EiD...<SNIP>",
    "@context": [
        "https://www.w3.org/ns/did/v1",
        {
            "@base": "did:ion:EiD...<SNIP>..."
        }
     ],
     "service": [
         {
             "id": "#linkeddomains",
             "type": "LinkedDomains",
             "serviceEndpoint": {
             "origins": [
                "https://contoso.com/"
                ]
             }
         },
         {
             "id": "#hub",
             "type": "IdentityHub",
             "serviceEndpoint": {
                "instances": [
                   "https://verifiedid.hub.msidentity.com/v1.0/11111111-2222-3333-4444-000000000000"
                ],
                "origins": [ ]
             }
         }
    ],

后续步骤