11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Microsoft Security Advent Calendar 2022Advent Calendar 2022

Day 6

Microsoft Entra Verified ID を使ってみた(①環境構築編)

Last updated at Posted at 2022-12-05

2022 年 8 月に Microsoft Entra Verified ID が GA されました。

参考:https://techcommunity.microsoft.com/t5/microsoft-entra-azure-ad-blog/microsoft-entra-verified-id-now-generally-available/ba-p/3295506

本記事では下記の公式ドキュメントを参考に、Verified IDを利用するための環境構築手順をご紹介します。

Microsoft Entra Verified ID

  • Microsoft が提供する分散型 ID サービスです。
  • ブロックチェーンの技術を利用したデジタル証明書を発行したり、検証したりすることができます。
  • 旧称は Azure Active Directory Verifiable Credentials で、GA に向けて名称が変更されました。

事前準備

Verified ID の環境構築にはいくつか事前に準備が必要です。

前提条件

  • Azure の各種リソースを作成するため、Azure サブスクリプションが適用された Azure テナントがあるものとします
  • 環境構築を行うユーザーは、テナントのグローバル管理者権限があるものとします

参考:https://docs.microsoft.com/ja-jp/azure/active-directory/verifiable-credentials/verifiable-credentials-configure-tenant#prerequisites

サービスエンドポイントの準備

詳しい内容については後で紹介しますが、Verified ID の利用には任意のドメインが必要です。

さらに、そのドメインを使い下記 URL にアクセスできる状態にしておく必要があります。

  • https://<Verified IDのドメイン>/.well-known/did.json
  • https://<Verified IDのドメイン>/.well-known/did-configuration.json

今回は App Services で代替しますが、既に上記のような URL にアクセスできる環境があればお使いの環境でも問題ありません。

App Service の作成

  • 名前:任意の名前
  • ランタイムスタック:.NET6
  • オペレーティング システム:Windows
  • 地域:Japan East
  • App Serviceプラン:無ければ新規作成

他はデフォルトで問題ありません。
1.png

コントローラーの作成

  • 新規に ASP .NET Web API のプロジェクトを作成し、下記のようなコントローラーを追加します。
    • 本記事では.NET6 を前提としたコードとなります。
  • コード内でdid.jsondid-configuration.jsonという JSON ファイルを参照していますが、こちらは後述の Verified ID の環境構築の際にダウンロードします。
using Microsoft.AspNetCore.Mvc;

namespace VerifiedId.Did.Api.Controllers
{
    [ApiController]
    public class DidController : ControllerBase
    {
        [Route("/.well-known/did.json")]
        public ActionResult GetDid()
        {
            var json = "";

            using (StreamReader stream = new StreamReader("./did.json"))
            {
                json = stream.ReadToEnd();
            }
            return Ok(json);
        }

        [Route("/.well-known/did-configuration.json")]
        public ActionResult GetDidConfiguration()
        {
            var json = "";

            using (StreamReader stream = new StreamReader("./did-configuration.json"))
            {
                json = stream.ReadToEnd();
            }
            return Ok(json);
        }
    }
}

Verified ID 向けのテナントを構成する

Key Vault の作成

下記のURLからAzure Portalにアクセスし、「リソースの作成」から「Key Vault」を選択します。

  • Key Vault名:任意の名前
  • 地域:Japan East
  • 価格レベル:標準

他はデフォルトの設定で良いです。
2.png

アクセスポリシーの設定

Key Vaultリソース作成後、アクセスポリシーを変更します

管理者ユーザー
  • Key Vault作成時のユーザーがデフォルトで登録されているため、このユーザーのアクセス許可に下記のアクセスポリシーを追加します
    1. キーの管理操作 > 作成
    2. キーの管理操作 > 削除
    3. 暗号化操作 > 署名
      • デフォルトで登録されているユーザーは1.および2.は既に追加済みのため、3.のみ追加する必要があります。
  • Key Vault作成者と環境構築をするユーザーが同じ場合は上記の設定のみで良いですが、別ユーザーが構築する場合は適宜上記の権限を持つユーザーを追加します。

3.png
4.png

Verified ID

下記の URL から Microsoft Entra 管理センターにアクセスし、「検証済みID > Overview」を選択します

初期設定

Verified IDの初期設定画面が表示されるため、下記の情報を登録します。

  • 組織名:任意の組織名
  • ドメイン:https:// から始まる任意のドメイン
    • 上述のサービスエンドポイントの準備でアクセスするURLのドメインです。
    • App Serviceでサービスエンドポイントを代替する場合はこちらにApp Serviceのドメイン(https://xxxxx.azurewebsites.netの形式)を入力します
      • このドメインは作成したApp Serviceの概要の画面で確認できます。
  • キーコンテナー:Key Vault の作成で作成したKey Vault
    5.png

初期設定が完了すると、先ほど作成したKey Vaultのアクセスポリシーにこのようなポリシーが自動的に追加されます。
6.png

サービスエンドポイントの構成

Verified IDの初期設定が完了したら、次に「検証済みID > ドメイン」の画面を開きます。

「資格情報または確認要求を作成する前に、[登録] で分散化 ID を登録する必要があります」という表記がありますので、こちらを設定していきます。
7.png

DID登録およびドメインの所有権の確認

下記の設定画面からダウンロードしたJSONファイルを下記のURLに配置し、検証します。

配置後は「検証状態の更新」を行い、状態が「登録済み」になることを確認します。

  • DID 登録
    • https://<Verified IDのドメイン>/.well-known/did.json
  • ドメインの所有権の確認
    • https://<Verified IDのドメイン>/.well-known/did-configuration.json
      8.png

DID 登録とドメインの所有権の確認の両方が完了していることを確認します。
9.png

App Service で代替した場合

上述のサービスエンドポイントの準備で App Service を利用している場合、ダウンロードした 2 点の JSON ファイルを作成したプロジェクトの.csproj ファイルと同じ階層にコピーします。

コピーが完了したら、App Service の作成で作成した App Service にデプロイします。

デプロイ後下記の URL でJSON が取得できることを確認し、上述の「DID登録」と「ドメインの所有権の確認」で検証します。

  • https://<Verified IDのドメイン>/.well-known/did.json
  • https://<Verified IDのドメイン>/.well-known/did-configuration.json

Verified ID で証明書を発行する

資格情報の作成

  1. 「検証済みID > 資格情報」の画面を開き「資格情報の追加」を選択します。
    10.png

  2. 「資格情報の選択」では「カスタム資格情報」し次へ。
    11.png

  3. 「新しい資格情報の作成」で下記の資格情報を入力します。

    • 資格情報名:VerifiedCredentialExpert
      • こちらは、「ルールの定義」のJSONのattestations > vc > typeの値と合わせる必要があります。
    • 表示の定義:下記のJSONを貼り付け
      {
        "locale": "ja-JP",
        "card": {
          "backgroundColor": "#333c5e",
          "description": "Use your verified credential to prove to anyone that you know all about verifiable credentials.",
          "issuedBy": "VerifiedIDSample",
          "textColor": "#ffffff",
          "title": "Verified ID Sample"
        },
        "consent": {
          "instructions": "Sign in with your account to get your card.",
          "title": "Do you want to get your Verified Credential?"
        },
        "claims": [
          {
            "claim": "vc.credentialSubject.id",
            "label": "ID",
            "type": "String"
          },
          {
            "claim": "vc.credentialSubject.firstName",
            "label": "First name",
            "type": "String"
          },
          {
            "claim": "vc.credentialSubject.lastName",
            "label": "Last name",
            "type": "String"
          }
        ]
      }
      
    • ルールの定義:下記のJSONを貼り付け
      {
        "attestations": {
          "idTokenHints": [
            {
              "mapping": [
                {
                  "outputClaim": "id",
                  "required": true,
                  "inputClaim": "$.id",
                  "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"
          ]
        }
      }
      

    12.png

  4. 作成が完了すると、下記のように証明書のプレビューやマニフェストファイルURL等が確認できます。
    13.png

Azure AD

Microsoft Entra 管理センターの「Azure Active Directory > Applications > アプリの登録」を選択します
14.png

アプリの登録

アプリの管理画面から「新規登録」を選択し、下記の設定を入力しアプリを作成します。

  • 名前:任意の名前
  • サポートされているアカウントの種類:この組織ディレクトリのみに含まれるアカウント (既定のディレクトリ のみ - シングル テナント)
  • リダイレクト URI:なし
    15.png

APIのアクセス許可の追加

  1. アプリの作成が完了したら、該当アプリの設定画面の「APIのアクセス許可」から「アクセス許可の追加」を選択します。
    16.png

  2. 「所属する組織で使用しているAPI」からVerifiable Credentials Service Requestを検索し、選択します。
    17.png

  3. API アクセス許可の要求は「アプリケーションの許可」を選択し、VerifiableCredential.Create.Allをチェックしアクセス許可を追加します。
    18.png

  4. 最後に、「<テナント名> に管理者の同意を与えます」を選択し、管理者の同意を与えます。
    19.png

  5. Verifiable Credentials Service Requestのアクセス許可の状態が「<テナント名>に付与されました」と表示されていることを確認します。
    20.png

シークレットの登録

  1. 該当アプリの設定画面の「証明書とシークレット」から「新しいクライアントシークレット」を選択します。
    21.png

  2. シークレットの説明と有効期限を入力し、追加します。
    22.png

  3. 登録が完了すると、シークレットの値が表示されます。この「値」を控えておきます。

    • シークレットの値は必ずこのタイミングで控えておいてください。画面をリフレッシュしたり、他の画面に遷移したりするとシークレットの値は再表示できなくなります。
    • このシークレットの値は証明書の発行アプリで利用します。
      23.png

最後に

これで環境構築は完了です。

このようにADの設定と、いくつかのAzureリソースを作成するだけで簡単にデジタル証明書の発行や検証を行うための環境が作成できます。

次回はMicrosoft公式で公開されているこちらのサンプルコードを参考に、実際にデジタル証明書を発行、検証するアプリケーションを作成します。

関連記事

参考資料

11
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?