本ブログでも何度か触れたことのある分散型ID(この日本語訳は微妙だな、、、とは思いますが。Decentralized Identity)ですが、マイクロソフトも「ION(アイオン)」というコードネームで取り組んでいる、という話は過去のde:codeなどでも紹介してきました。
de:code 2019での発表資料
本ブログの過去ポスト
https://idmlab.eidentity.jp/2019/04/blog-post.html
先日のBuildでも当然セッションがあり、6月にUpdateあるよ!的な話がささやかれていたのですが、予定通り出てきました。
URLは相変わらずプレビュー間満載ですが・・・・
https://didproject.azurewebsites.net/docs/overview.html
新プレビューの概要
今回のプレビューで出来るようになったことは大きくは以下の通りです。- Azure ADとの統合(Credentialsのソースとして利用)
- Microsoft AuthenticatorをWalletとして利用
- Azure Key VaultでVerifiable Credentialsへの署名する鍵を管理
想像するにこんな感じの構造になっていると思われます。
構造としてはこんな感じです。
【Verifiable Credentialsの発行時】
- Portable Identity Cards(実体のアプリ名はVerifiable Credentials Issuer Service)がAzure ADにEnterprise Applicationとして登録されている
- Portable Identity CardsがAzure AD上に登録されたユーザの情報を元にVerifiable Credentials(VC)を発行する
- ユーザはMicrosoft Authenticator(現状はAndroid/Beta版のみ対応)に発行されたVCをカードのメタファとして保存(ちなみに使われていると思われるAndroid用のSDKもここに公開されているので自作するのも可能なはず)
- VCへの署名をするための秘密鍵はAzure KeyVaultで管理される
- 分散台帳(ION)とのやり取りはPortable Identity Cardsサービスが使っているverifiablecredentials-verification-sdk-typescriptがやっている
【Verifiable Credentialsの利用時】
- Portable Identity Cardsサービスと同じく、verifiablecredentials-verification-sdk-typescriptを使ったサービスへアクセス
- サービスはQRコードを使ってVCの開示要求、ユーザはMicrosoft AuthenticatorでQEコードを読み込み、VCを送付
- Portable Identity CardsサービスはVCをDLT上の公開鍵を使って検証(この辺もverifiablecredentials-verification-sdk-typescriptがやっている)
上記よりわかる通り、実体は「verifiablecredentials-verification-sdk-typescript」です。これをVC発行者がわかりやすいようにAzure AD/Azure KeyVaultと統合したものがPortable Identity Cardsであり、ユーザが使いやすいようにしたのがMicrosoft Authenticatorということです。
動きを見てみる
では、早速試してみましょう。
と言いたいところなのですが、Limited PreviewなのでMicrosoftに承認されないと動きません。(申請してみたけど返事がない・・・)
ただ、手順を見ているとAzure ADのEnterprise ApplicationsにVerifiable Credentials Issuer Serviceが出てきてObjectIDが取れればPreview機能が有効になっているよ、とあるのですが、一向にPortable Identity Cardsの管理コンソールがAzure Portalに現れません・・・・
上の図の通り、Previewが有効化されたテナントでAzure AD P1もしくはP2を有効にするとエンタープライズアプリケーションの一覧にVerifiable Credentials Issuer Serviceは出てきましたが、Portable Identity Cardsのコンソールが出てこない・・・(以下の図は手順書より)
ということで、自前のAzure ADを使うのはあきらめて素のverifiablecredentials-verification-sdk-typescriptを使ったサンプルコードを使って試してみます。
ちなみに、昨日までVCの発行まではうまく動いたのですが、検証はうまく動きませんでした。しかし、今朝サンプルコードが更新され現在はちゃんと検証まで動くようになりました。
サンプルコートはココにありますので、ローカルにcloneして使いました。
ちなみにMicrosoft Authenticatorからサービスにアクセスできる必要があるので、ngrokを使って外部からアクセスできるようにしました。
改造したコードはこちらです。
Issuer
Verifier
それぞれnpm installしてnode app.jsで実行できます。
まずはIssuerから動かします。
(前もってMicrosoft Authenticatorのベータ版を入れておいてください。現状Android版のみです)
起動すると画面上にボタンがあるのでクリックするとQRコードが表示されますので、これをAuthenticatorで読み込むと、Azure AD B2Cでのログインを要求されますので、アカウントの作成~ログインを行うとカード(Verified Credential Ninja)が追加されます。
Authenticatorでその他のアカウントを追加してQRコードを読み取る
Sign in to your accountでAzure AD B2Cへログインする。(初回は新規作成)
ログインが終わったらAcceptをタップします。
上手くいくとカードがAuthenticatorの中に保存されます。この中にVerifiable Credentialsとして氏名の情報が入っています。
次はVerifyです。
ngrokを使っていると2つ同時にサービスを挙げられないのでIssuerを停止しておきます。
Verifierを起動するとIssuerと同じようにボタンがあるのでクリックするとQRコードが表示されます。
これをAuthenticatorのカードの画面にあるQRコードリーダーを使って読み取ります。
上手くいくと画面上に「Congratulations, XX XX is a Verified Credential Ninja!」と出てきます。
ここまでは外から観測できたことなので、今後は引き続き中身を掘ってみようと思います。
IdentityCardRules.jsonファイルをいじくると他のOpenID Providerからでもクレデンシャル発行が出来るようですし。
参考)Buildのセッションの動画