SIOP DID Browser Extension

# はじめに

近頃、Self-sovereign identity (SSI) においてSIOPの利用の検討に伴い様々な実装がでてきました。
そこで本記事では、SIOPの実装の一つである、Chrome拡張として実装されたSIOP DID Browser Extensionについて触れたいと思います。

- https://github.com/decentralized-identity/did-siop-browser-ext
- https://github.com/RadicalLedger/did-siop-rp-web-test
- https://github.com/RadicalLedger/did-siop-rp-web-min

仕様としては、[Self-Issued OpenID Connect Provider DID Profile v0.1](https://identity.foundation/did-siop/) (SIOP DID)が元になっているとようです。
SIOP DIDについては、すでに[秋田の猫さんの解説記事](https://ritou.hatenablog.com/entry/2020/09/22/060000)があったり、そもそも執筆時点 (2020/12/24) で[SIOP DIDとしての仕様の策定は停止している](https://medium.com/decentralized-identity/dif-oidf-9753b9bd0093)ため、プロトコルの詳細には触れず、動作確認の結果にとどめます。
Chrome拡張としてのSIOP実装を検討する際の役にたてば幸いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/07ae92c9-ba53-e7d2-72e6-b159ed1ac5e9.png)
(引用元: https://identity.foundation/did-siop/)



# 事前準備
動作確認はdid-siop-browser-extリポジトリの[README](https://github.com/decentralized-identity/did-siop-browser-ext#see-in-action)を参考に進めていきます。
ここではChrome拡張のインストール手順については省きますので、did-siop-browser-extリポジトリのREADMEを参照して正しい方法でインストールしてください。
インストールが成功した場合、以下のようにブラウザにアイコンが表示され、アイコンを押下すると、パスワードの設定を要求されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/43d6ce9b-d0fd-52a5-32fa-7afa2077d7f3.png)

パスワードの設定がうまくいった場合、ログイン画面が表示されるため設定したパスワードを入力して``[Login]``を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/fb4ae0c0-c723-d519-4117-420161ef02e3.png)


つづいて、順次設定をおこなっていきます。まずは``[Settings]``を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/4f51da18-fd9d-8223-fea7-5652c9a03354.png)


DIDや署名鍵などの設定をおこないます。``[Test Data]``を押下することでテスト用のデータが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/ce7e6d8e-2390-cb59-d829-1c190367e999.png)


データを初期化するため、警告が表示されますが``[Yes]``を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/a638862b-8f59-8103-96d8-a94dfd5436c9.png)

これでCurrent IdentityとSigning Keysが設定され、動作確認する準備が整いました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/9c6d958a-4b99-9a6c-31bf-d1249556039f.png)

このままでも、TestDataを利用して動作検証を進めることは可能ですが、[SIOP-DID Tools](http://tools.didsiop.org/)から独自にDIDと鍵ペアを作成して設定してみます。左のメニューから``[Generate DID]``を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/ec09130f-77c3-d985-6998-dce276ff18a3.png)

``[GENERATE DID]``を押下すると、Address、Private key、DIDが表示されます。これらの値は後ほど利用するのでメモしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/a1cab6e5-ae89-b6f8-6809-8ae0239f0f8b.png)

つづいて、左のメニューから``[Resolve DID]``を押下し、先ほどメモしておいたDIDを入力して``[RESOLVE DID]``を押下し、DID-Docを以下の通り取得します。
ここで、publicKeyのidは後ほど確認に利用するので忘れないようにメモしておくようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/63ddf8c4-e9fe-cd38-bee3-88c8034b7676.png)

ここで、Chrome拡張の作業に戻ります。``[Settings]``からCurrent Identityを``[Change]``を押下して変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/d7abf818-ff9a-0bab-15bf-0e68de77e714.png)

New DIDに先ほど作成してメモしておいたDIDを入力して``[Change DID]``を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/bca71ef9-c01a-95b4-0b51-1f43339f6193.png)
つづいてSigning Keysから``[Add New Key]``を押下して署名鍵を変更します。
ここでも先ほどメモしておいた値の中から、PrivateKeyを入力して``[Add Key]``を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/8e71e610-d4d6-b90d-034e-b1262e2f38bc.png)

# 認証

まず、[Relying Party App](http://rp.didsiop.org/) (http://rp.didsiop.org/) にアクセスします。
``[Login With Your DID]``というボタンがあるのでこちらを押下します。これで、SIOPに対してAuthentication Requestが送られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/6066db01-3c4b-3b61-40dd-4cb7f91130f9.png)

Chrome拡張を確認するとのPending RequestsにURLが記載されたボタンが追加されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/cc53b6a9-2a14-8b3c-c894-bf7a8ee6083e.png)

先ほどのURLが記載されたボタンを押下すると、Confirm login requestというダイアログが表示されます。ここで``[Yes]``を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/6e2ce7ec-4350-20f9-8ca7-ebe667e971c2.png)

IDトークンつきでRelying Partyにリダイレクトされました。``Congratulations ! You are successfully authorized to this App
``と記載されているので正常に動作したようです。わざわざjwt.ioのリンクを配置してくれているので、IDトークンの中身を確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/0441da37-1dfa-2024-6554-ab02ffaaade7.png)

Claimは以下のようになっていました。
OIDC Core [7.5. Self-Issued ID Token Validation](https://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html#SelfIssuedValidation)および[SIOP DID 3.3 Generate SIOP Response](https://identity.foundation/did-siop/#example-10)で定義されているとおり、issは``https://self-issued.me``になっており、audもリダイレクトURLの``http://rp.didsiop.org/home``になっていることが確認できます。
また、DIDは先ほど新しく作成したDIDになっており、kidも新規作成したDIDでResolveしたDID Docに含まれていたpublicKeyのidになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213529/f85c0d8e-9c60-4456-d682-600ba6d9e278.png)

# おわりに

SIOPの実装も検討が進んでいき、今回紹介したChrome拡張などもでてきています。
なお、今回紹介したDID SIOPに関する情報は以下のWebサイトにまとめてあります。
https://didsiop.org/
色々なSIOP実装がでてくる中で、どういった実装の形式が今後普及していくか楽しみですね。

# 参考
- https://github.com/decentralized-identity/did-siop-browser-ext
- https://github.com/RadicalLedger/did-siop-rp-web-test
- https://github.com/RadicalLedger/did-siop-rp-web-min
- https://identity.foundation/did-siop/
- https://medium.com/decentralized-identity/dif-oidf-9753b9bd0093
- https://ritou.hatenablog.com/entry/2020/09/22/060000