uPortとサービスの連携フロー
uPort のドキュメントが読みやすくなったそうなので読んでみました。
uPort
uPort は分散Web時代の認証システムです。
例えば従来のSNS認証の流れを考えてみると
ユーザー・SNS・サービスの3つの役者がおり、ユーザーはSNSとサービスを信頼して個人情報を預ける必要があります。
この認証スキームをuPortを使った場合で考えると、
この様にuPortがIdentity Providerとなり、 uPort 自体はブロックチェーン上で動いているので特定の機関を信頼する必要がなく、秘密鍵を所持しているユーザーが自分の個人情報を完全にコントロールできるようになるというわけです。
uPort からはアカウントを簡単に管理できるようにアプリもリリースされています。
サービスの連携フロー
uPort ドキュメントのGUIDEに書かれているサービスとの連携フローについて紹介します。
Requesting Credentials
まずは図でも説明したサービスに個人情報を提供する流れです。
図の出典: Requesting Credentials | uPort Developer Portal
図はデスクトップウェブと連携する流れを想定しています。
- アプリが認証用のQRコードを表示します
- アプリは1と同時にChasqui(後述)にポーリングします
- ユーザーはモバイルでQRコードをスキャンします
- ユーザーが同意したらChasqiにその情報が送られます
- アプリはChasqiからデータを受け取ります
Chasqiはセッションを利用したデータの授受を管理してくれるサービスでuPortが開発しているAWS Lambda上で動くサービスです。
GitHub - uport-project/lambda-chasqui: 🏃 Messenger service 🏃
使うときは自分でAWSにデプロイして使います。
Attesting Credentials
次にAttestingの流れです。Attestingはアプリ側が作成したデータをユーザーに署名してもらうためのフローです。例えばアプリ側で新たに入力してもらった個人情報に署名してもらってuPortのアカウントと紐付けるなどですね。
図の出典: Attesting Credentials | uPort Developer Portal
1~5は Requesting Credentials のときと同じです。ここからuPortのアプリでプッシュ通知を許可しているかしていないかで挙動が変わります。
プッシュ通知を許可していない場合は6b, 7bのフローでQRコードを使ってAttestingを行います。
プッシュ通知を許可している場合は、
6a. AttestationトークンをPututu(後述)に送る 7a. Pututuはユーザーの公開鍵からIPFS上にあるプッシュトークンを使ってユーザにプッシュ通知を送る 8a. ユーザーはプッシュ通知経由でAttestatoinトークンを受け取る
という流れになります。
PututuはChasqiと同じくuPortが開発しているAWS Lambdaのサービスで、上述したプッシュ通知周りの処理を解決してくれます。
GitHub - uport-project/lambda-pututu: Push notification service
まとめ
uPort はブロックチェーンをうまく使っていて面白いですね。ドキュメントには Signing Transactions というアプリ側にトランザクション手数料を肩代わりさせる仕組みも載っているので面白いと思います。将来的に色んなアプリが uPort ログインを実装すると便利になりそうですね。