こんにちは、富士榮です。
前回に引き続きMATTRの分散型IDプラットフォームを触ってみます。
前回はプラットフォーム自体のセットアップとIssuer DID、VC(Verifiable Credential)の設定までを行いましたので、今回はWalletに対して実際にVCを発行するところまでをやってみます。
MATTRの基本的な考え方としては、バックエンドのプラットフォーム自体は認証やユーザ管理の機能を持たず外部のIdentity Providerと連携したIssuerを通じてVCを発行する、という形となっています。
公式ドキュメントではAuth0と連携したIssuerを作成し、VCを発行する仕組みが紹介されていますので、まずはこれをやってみたいと思います。
やるべきことは以下の3つです。
- 外部OpenID Providerの構成
- 外部OpenID Providerと連携したIssuerの定義を作成
- 出来上がったIssuerでの発行リクエストをQRコードにしてWalletで読み取りVCを発行
外部OpenID Providerの構成
- アプリケーション(Client)を作成する
- ユーザに発行すべきcredentialの型と値を属性として持たせる
の2点だけです。
まずはアプリケーション登録ですが、通常のRegular Web Applicationとしてクライアント定義をしていきます。
MATTR側に設定するために必要なのはclient_idとclient_secretのみなのでアプリケーションを作成したこれらの値をメモしておきましょう。
ちなみにredirect_uriについてはMATTR側でIssuer定義を行うと生成されますのでここでは設定しなくてもOKです。
次にユーザに必要な属性を設定します。これもAuth0側の設定となりますが、該当のユーザを開き、user_metadataとして属性と値を設定します。サンプルに従いこんな感じに設定します。
{ "educationalCredentialAwarded": "Almuni 2020" }
一旦はOpenID Provider側の設定はおしまいです。
Issuerの作成
- 前回のPOSTで生成したIssuer DID
- 先に取得したclient_id、client_secret、OPのurl(内部的に.well-knownを取得しにいくのでドメイン名の部分まで)
- 属性のマッピング
curl --request POST \ --url https://tenant.platform.mattr.global/oidc/v1/issuers \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer REPLACE_ACCESS_TOKEN' \ --data '{"credential": { "issuerDid": "did:key:z6MkjBWPPa1njEKygyr3LR3pRKkqv714vyTkfnUdP6ToFSH5", "name": "University Attendance Credential", "context": [ "https://schema.org" ], "type": [ "AlumniCredential" ] }, "federatedProvider": { "url": "https://example-university.au.auth0.com", "scope": [ "openid", "profile", "email" ], "clientId": "vJ0SCKchr4XjC0xHNE8DkH6Pmlg2lkCN", "clientSecret": "QNwfa4Yi4Im9zy1u_15n7SzWKt-9G5cdH0r1bONRpUPfN-UIRaaXv_90z8V6-OjH" }, "claimMappings": [ { "jsonLdTerm": "alumniOf", "oidcClaim": "alumni_of" } ] }'
WalletへVCを発行する
QRコードを読み取ると左端の画像のようにCredential Offerとして表示され、ProceedをタップするとAuth0のログオンが要求され、成功するとCredentialを受け取流ことができます。