前回は、雇用証明(従業員確認)ベースでの検証をご紹介しました。Microsoft Entra IDから簡単にセットアップできるよう、Microsoftが各種コンポーネント(Issuer / VerifierのWebアプリ)を用意していました。今回から「本人確認」ベースの検証をご紹介していきます。前回との違いは「VC検証するデータは自分で定義する」ことと、データのアップロードを含むVC発行とVC検証のWebアプリを自分で用意する、という点です。
とはいえ、知識がないと容易に実装することができませんので、MicrosoftではサンプルWebアプリを用意し、これをカスタマイズすることで、検証が行えるようになっています。一気に複雑になってしまいますが、進めていきましょう!
本人確認
外部Issuer Webサーバーに対して、本人確認を示す情報を登録します。登録された情報を基にVCが発行され、本人性が証明されます。外部Verifier Webサーバーに対して、本人確認のVCを表示すると、VC情報とその詳細が表示される、というシナリオです。基本的にチュートリアル: Microsoft Entra の検証済み ID の詳細設定 - Microsoft Entra Verified ID | Microsoft Learnに添った方法で、展開を行っていきます。
前提環境の構築
今回は、外部WebサーバーにMicrosoftのEntra Verified ID用のサンプルアプリをデプロイし、このWebアプリが「Issuer」と「Verifier」を兼任して発行と検証を行う、という環境になります。また、実際のWebサーバーへのデプロイを行うのは作業が大変なため、Visual Studio Code上でサンプルアプリを動作させ、ngrokでリダイレクトして公開する、というかたちをとります。ngrokについては、Ngrokの使い方・実際に私が使っている事例を紹介 #twilio - Qiitaなど、個別の確認をお願いします。
Git開発構築の構築
上記をふまえ、Git開発環境を作成します。Windows 11クライアント上で構築します。必要なものは、以下になります。
まずGitをインストールします。最新版で問題ないでしょう。初期設定の通りにインストールします。
次に.NET SDK 7.0をインストールします。本来であれば.NET 8より前はサポート切れのため、使用しないことが推奨されます。(後述する)Microsoftサンプルアプリには.NET 8.0に対応している旨の記載があるのですが、筆者が試した限り、.NET 9.0 / .NET 8.0のどちらもエラーが出て、正常にビルドできませんでした。今回はサンプル動作ということで、お許しいただけると幸いです。
ngrokをインストールします。有償版と無償版がありますが、今回は無償版で問題ありません。インストール後にngrokアカウントの作成と登録が必要です。アカウントを作成すると、アカウントごとのトークンが発行されるため、コマンドで登録を行います。
Visual Studio Codeも当然必要です。インストールをお願いします。Visual Studio Community等上級機種でも問題はない(ライセンスの遵守についてはご自身で担保してください)のですが、簡単な設定ファイルやソースの修正だけですのでVisual Studio Codeで問題はないでしょう。
あとはSFTPクライアントもあると便利です。筆者はWinSCPを利用しました。
Entra Verified IDの詳細セットアップ①
Key Vaultのセットアップ
Entra Verified IDへのアクセスの際に使用する、シークレットを保護管理するリソースになります。Entra Verified ID構成以前に作成する必要があります。キーコンテナをまず作成します。この時[アクセス構成]については[コンテナーのアクセスポリシー]ベースでアクセス許可を設定する必要があります。キーのアクセス許可だけで大丈夫ですが、キーの管理操作のほか、[署名]の権限を持っている必要があります。
Entra Verified ID組織の設定を構成
[Entra ID管理センター]から、[検証済みID]-[概要]-詳細セットアップからセットアップを行います。
[セットアップ]-[組織の設定を構成]-[構成]から構成します。
[キー コンテナー]は先ほど作成したKey Vaultを指定します。[信頼される側のドメイン]については[外部WebサーバーのFQDN]になるので、注意してください。この時点では(名前解決は必須でないので)任意のドメインで大丈夫ですが、一度設定してしまうと変更ができず、どうしてもという場合はVerified IDをリセットしなければならなくなります。
Entra Verified IDの詳細セットアップ②
Entra IDアプリ登録
Entra Verified IDへのWebアプリの登録を行います。[Microsoft Entra ID]-[アプリの登録]から以下の設定でアプリを追加します。名前は任意でよく、リダイレクトURIは登録不要です。
続いてAPIアクセス許可の設定を行います。[APIアクセス許可の要求]-[所属する組織で使用しているAPI]から[Verifiable Credentials Service Request]の権限を検索で探します。[アプリケーションの許可]の[VerifiableCredential.Create.All]を選択します。アクセス許可が追加出来たら[<テナント名>に管理者の同意の確認を与えます]の設定を忘れないようにします。
この後、アプリが利用するシークレットを作成します。シークレット文字列は作成時に一度しか表示されないので、確実にコピーを保存しておきます。
App Serviceの構成
公開するWebサーバーを構成します。Azure App Servicesがやりやすいです。以下のように構成します。Azure ServiceプランはBasic B1を選択しましたが、もっと小さいもの(=安いもの)でも大丈夫です。データベースやネットワークは不要です。ただし[認証の設定]の[基本認証]は有効にしておきます。SFTPでアップロードする際に必要です。
続いてApp Serviceのカスタムドメインの設定を行います。先の[Entra Verified IDの詳細セットアップ①]で指定した[信頼されるドメイン]のFQFNが名前解決できること、https通信の要件(SSL証明書等)を満たす必要があります。カスタムドメイン設定を行うだけで、すべてが設定できます。
カスタムドメインの名前解決に必要なCNAMEやTXTレコードを、事前にDNSドメインゾーンに登録しておく必要があります。今回はAzure DNSゾーンでホストしているため、問題なく設定ができました。
Gitデプロイ環境の構築
次に[ローカルGit]によるデプロイ環境構築を行います。[App Service]-[<アプリ名>]-[デプロイ]-[デプロイセンター]の[設定]で、[ローカルGit]を選択します。設定後に[GitクローンURI]をメモします。
あわせて[ローカルGitまたはFTPSの資格情報]の項目で、ユーザースコープのユーザー名とパスワードを指定します。このアカウントはGitアップロード時に利用します。
ここまで来たら、MicrosoftのサンプルアプリをGitクローンし、Webアプリにアップロードします。以下のコマンドです。アップロード時にGitアカウントを求められたら、ユーザースコープのID/パスワードを入力します。Git pushコマンドでエラーが出た場合、何回か繰り返すと収束します。
git clone https://github.com/Azure-Samples/active-directory-verifiable-credentials-dotnet.git
cd .\active-directory-verifiable-credentials-dotnet\
git remote add azure https://entra-vc-app.scm.azurewebsites.net:443/entra-vc-app.git
git push azure main:master
Entra Verified ID分散化IDの登録
[検証済みID]-[概要]-[セットアップ]-[分散化IDの登録]から登録を行います。今回参照が必要な、Entra Verifiable IDによって作成済みのDIDドキュメント(did.json)をいったんダウンロードしたうえ、Webサーバーにアップロードします。アップロード先は[https://<WebサーバーFQDN>/.well-known/did-configuration.json]になります。
アップロードにはSFTPを利用します。筆者の環境ではユーザースコープのアカウントではどうしてもうまく認証が通らなかったため、アプリケーションスコープのFTPSユーザー名を利用しました。ですが、単にファイルをアップしただけでは、(Windowsの)IISではjsonファイルへの要求を返さないため、web.configファイルでMIMEマッピングの追加を行う必要があります。詳細については、Web.config for allowing .json files in IIS (for Azure Web Apps) · GitHubに説明があります。設定は以下の通りです。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
<security>
<requestFiltering>
<hiddenSegments>
<remove segment=".well-known" />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
</configuration>
WebサーバーにSFTPでログインした後、ルートフォルダーの配下に[.well-known]フォルダーを作成し、このフォルダーの配下に[web.config]と[did.json]をアップロードします。この状態で、上記の[登録状態の更新]を行うと、登録が正常に行われます。
Entra Verified IDの詳細セットアップ③
Entra Verified IDドメインの所有権を確認
[検証済みID]-[概要]-[セットアップ]-[ドメインの所有権を確認します]から確認を行います。今回参照が必要な、Entra Verifiable IDによって作成済みのDIDドメインリンクファイル(did-configuration.json)をいったんダウンロードしたうえ、Webサーバーにアップロードします。アップロード先は[https://<WebサーバーFQDN>/.well-known/did-configuration.json]になります。
アップロードにはSFTPを利用します。WebサーバーにSFTPでログインした後、 [.well-known]フォルダーの配下に[did-configuration.json]をアップロードします。この状態で、上記の[登録状態の更新]を行うと、確認が正常に行われます。
以上でEntra Verified IDのテナント設定については、すべて完了しました。
いかがだったでしょうか?少し長かったですが、Entra Verified IDサービスの構成と、Issure / Verifier用のWeb Appサービスの構築まで進みました。作業だけ見ると、取っ散らかっている感があるのですが、全体図を意識いただいて、作業を見ていただくと、どのコンポーネントを構成しているのか、がはっきりわかっていただけると思います。次回はこの環境でのVC発行とVC検証を体験いただくところまで、進めたいと思います。いささか長いですが、よろしくお願いします!
- ※文中の商品名、会社名、団体名は、一般に各社の商標または登録商標です。





























