创建具有多个证明的可验证凭据

使用多个证明类型的规则定义会生成声明来自多个源的颁发流。 例如,可能需要提供现有凭据,并在 Microsoft Authenticator 中手动输入声明的值。

在本操作指南中,我们将通过以下方式来扩展 ID 令牌提示证明示例:添加用户在颁发期间必须在身份验证器中输入的自我证明声明。 对已验证 ID 的颁发请求将包含一个 ID 令牌提示,其中包含 given_namefamily_name 的声明值,以及用户自己输入的声明 displayName 的自颁发证明类型。

创建具有多个证明类型的自定义凭据

在 Azure 门户中选择“添加凭据”时,可以选择启动两个快速入门。 选择“自定义凭据”,然后选择“下一步”。

创建自定义凭据的“颁发凭据”快速入门的屏幕截图。

在“创建新凭据”页上,输入显示和规则定义的 JSON 代码。 在“凭据名称”框中,为凭据提供类型名称。 要创建凭据,选择“创建”。

“创建新凭据”页的屏幕截图,其中显示了用于显示和规则文件的 JSON 示例。

示例 JSON 显示定义

ID 令牌提示显示定义相比,JSON 显示定义具有一个名为 displayName 的额外声明。

{
    "locale": "en-US",
    "card": {
      "title": "Verified Credential Expert",
      "issuedBy": "Microsoft",
      "backgroundColor": "#507090",
      "textColor": "#ffffff",
      "logo": {
        "uri": "https://didcustomerplayground.blob.core.windows.net/public/VerifiedCredentialExpert_icon.png",
        "description": "Verified Credential Expert Logo"
      },
      "description": "Use your verified credential to prove to anyone that you know all about verifiable credentials."
    },
    "consent": {
      "title": "Do you want to get your Verified Credential?",
      "instructions": "Sign in with your account to get your card."
    },
    "claims": [
      {
        "claim": "vc.credentialSubject.displayName",
        "label": "Name",
        "type": "String"
      },
      {
        "claim": "vc.credentialSubject.firstName",
        "label": "First name",
        "type": "String"
      },
      {
        "claim": "vc.credentialSubject.lastName",
        "label": "Last name",
        "type": "String"
      }
    ]
}

示例 JSON 规则定义

JSON 规则定义包含两个不同的证明,这些证明指示 Authenticator 从两个不同的源获取声明值。 对请求服务 API 的颁发请求提供声明 given_name 的值,并 family_name 满足 idTokenHints 证明。 颁发期间,将要求用户在 Authenticator 中输入 displayName 的声明值。

{
  "attestations": {
    "idTokenHints": [
        {
        "mapping": [
            {
            "outputClaim": "firstName",
            "required": true,
            "inputClaim": "$.given_name",
            "indexed": false
            },
            {
            "outputClaim": "lastName",
            "required": true,
            "inputClaim": "$.family_name",
            "indexed": false
            }
        ],
        "required": false
        }
    ],
    "selfIssued": {
      "mapping": [
        {
          "outputClaim": "displayName",
          "required": true,
          "inputClaim": "displayName",
          "indexed": false
        }
      ],
      "required": false
    }
  },
  "validityInterval": 2592000,
  "vc": {
    "type": [
      "VerifiedCredentialExpert"
    ]
  }
}

在颁发期间输入的声明

在颁发期间,Authenticator 会提示用户为指定的声明输入值。 未验证用户输入。

自颁发声明输入的屏幕截图。

颁发的凭据中的声明

颁发的凭据总共有三个声明,其中 FirstLast name 来自 id 令牌提示证明,Name 来自自我颁发的证明。

已颁发凭据中声明的屏幕截图。

配置示例用于颁发和验证自定义凭据

要配置示例代码用于颁发和验证自定义凭据,需要:

  • 租户的颁发者分散式标识符 (DID)
  • 凭据类型
  • 指向凭据的清单 URL

查找自定义凭据的此信息的最简单方法是转到 Azure 门户中的凭据。 选择“颁发凭据”。 然后便可以访问具有请求服务 API JSON 有效负载的文本框。 将占位符值替换为环境的信息。 颁发者的 DID 是 authority 值。

快速入门自定义凭据颁发的屏幕截图。

后续步骤

查看规则和显示定义参考