Microsoft Entra Verified IDを動かしてみる 第4回

~検証作業(本人確認2)~

Microsoft

2025.12.18

     

前回は、本人認証のためのVC発行、ということで、Webアプリ等開発環境の整備とEntra Verified IDのテナントレベルのセットアップを完了させたところまで行いました。今回はいよいよVCの定義情報をEntra Verified IDに構成し、サンプルWebアプリ経由でVCを発行させてみます。以下、お付き合いください。

Entra Verified ID資格情報のセットアップ

[検証済みID]-[資格情報]-[資格情報の作成]からVC定義情報をセットアップします。

[資格情報の選択]で[カスタム資格情報]を選択します。

[新しい資格情報の作成]では、以下のように設定します。資格情報名は任意ではなく、(ルールの定義に)Typeで指定されていることを確認します。
[資格情報名]には[VerifiedCredentialExpert]
[表示の定義]には以下の通り

{
    "locale": "en-US",
    "card": {
      "title": "Verified Credential Expert",
      "issuedBy": "Microsoft",
      "backgroundColor": "#000000",
      "textColor": "#ffffff",
      "logo": {
        "uri": "https://didcustomerplayground.z13.web.core.windows.net/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.firstName",
        "label": "First name",
        "type": "String"
      },
      {
        "claim": "vc.credentialSubject.lastName",
        "label": "Last name",
        "type": "String"
      }
    ]
}
  

[ルールの定義]には以下の通り

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

次に作成した[VerifiedCredentialExpert]-[資格情報を発行する]から、要求本文を表示し、以下必要な情報をメモします。Webアプリへのソースコードに転記するためです。

[authority]:<登録済みDID>
[manifest]:<URI全文>
[tenantid]:<manifest内の/tenants/直後のID>

同様に[Microsoft Entra ID]-[アプリの登録]-[<登録App名>]-[概要]から以下についても情報をメモします。シークレット文字列については、以前の手順で取得したメモを利用します。

[clientid]:<(アプリの)クライアントID>
[clientsecret]:<(アプリの)シークレット文字列>

Microsoftサンプルアプリのセットアップと実行

Visual Studio Codeで(Git cloneでコピーした)ローカル上の[ACTIVE-DIRECTORY-VERIFIABLE-CREDENTIALS-DOTNET]フォルダーを開き、[1-asp-net-core-api-idtokenhint]-[appsettings.json]を開きます。appsettings.jsonの以下項目を書き換えてセーブします。

"VerifiedID": {
    "ApiEndpoint": "https://verifiedid.did.msidentity.com/v1.0/verifiableCredentials/",
    "TenantId": "[tenantid]の値",
    "Authority": "https://login.microsoftonline.com/{tenant}/v2.0/",
    "scope": "3db474b9-6a0c-4840-96ac-1fceb342124f/.default",
    "ClientId": "[clientid]の値",
    "ClientSecret": "[clientsecret]の値",
    "CertificateName": "Enter here the name of a certificate (from the user cert store) as registered with your application",
    "client_name": "DotNet Client API Verifier",
    "Purpose": "To prove your identity",
    "DidAuthority": "[authority]の値",
    "includeQRCode": false,
    "includeReceipt": true,
    "allowRevoked": false,
    "validateLinkedDomain": true,
    "CredentialType": "VerifiedCredentialExpert",
    "CredentialManifest": "[manifest]の値",
    "IssuancePinCodeLength": 4,
    "useFaceCheck": false,
    "PhotoClaimName": "photo",
    "matchConfidenceThreshold": 70,
    "CredentialExpiration": "" // EOD, EOW, EOQ, EOY, "". Only valid for idTokenHint flows
  }
  

次に[1-asp-net-core-api-idtokenhint]-[AspNetCoreVerifiableCredentials.csproj]を開きます。AspNetCoreVerifiableCredentials.csprojの以下項目を書き換えてセーブします。

<PropertyGroup>
	<TargetFramework>net7.0</TargetFramework>
</PropertyGroup>

Visual Studio Codeからコードをデバッグ実行すると、[AspNetCoreVerifiableCredentials.dll]がコンパイルされます。警告が表示される場合もありますがエラーが出なければ正常に実行されます。

上記アプリはローカル環境で実施されているため、ここからngrokでインターネット経由での公開を行います。以下コマンドを実行します。

./ngrok http 5000
  

こうするとngrokが外部公開用のURLを表示しますので、それをクリックすることで、インターネット経由でのアクセスを行うことができます。

ちなみに、このアプリのアイコンになっているのは「NinjaCat」というMicrosoft開発チームの非公式マスコットです。Windows 10時代の顔文字で有名ですが、愛らしいだけでなく、歴史もあるマスコットなのです。KC Lemson: maestro of fun, mastermind of memes - Microsoft LifeThe origin story of the Microsoft ninjacat - The Old New Thingなどをご覧いただくと楽しめるかと思います。

VC資格情報の発行

Webアプリから[Issue Credential]をクリックすることで、VC資格情報が発行できます。二次元コードが表示されますので、Microsoft Authenticatorで読み込むことで、保存することができます。表示されたPINコードの入力が必要です。

AuthenticatorにもVCと発行履歴を確認することができます。

VCの属性についてですが、ここでは「FirstName」「LastName」の2つのみが対象です。実際はアプリに格納済みの情報ですが、「ユーザーがアップロードした正規の情報」という扱いを想定していると思われます。

VC資格情報の検証

ブラウザーの[戻る]ボタンから最初のページに戻ることで、Webアプリの[Verify Credential]をクリックして、VC資格情報を検証できます。

VCの検証が成功すると、VCのDetail情報がWebページに表示されます。

Authenticator側のVCにも検証のアクティビティが記録されます。

今回は、無事Webアプリ経由で、期待した属性情報で構成されたVCの発行ができました。サンプルですので情報が貧弱ですが、登録ロジックを実装すれば、属性情報を増やすことはできるでしょう。このVCは「本人確認用」ですので、次回は写真情報をWebアプリにアップロードしたうえ、この写真から本人確認を行ってみたいと思います。よろしくお願いします。

  • 文中の商品名、会社名、団体名は、一般に各社の商標または登録商標です。

Microsoft Entra Verified IDを動かしてみる 第4回