2020年6月9日火曜日

分散型ID「ION」のプレビューがアップデート

こんにちは、富士榮です。

本ブログでも何度か触れたことのある分散型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のセッションの動画