uPortとサービスの連携フロー

uPort のドキュメントが読みやすくなったそうなので読んでみました。

uPort Developer Portal

medium.com

uPort

uPort は分散Web時代の認証システムです。

例えば従来のSNS認証の流れを考えてみると

f:id:lotz84:20180711174029p:plain:w400

ユーザー・SNS・サービスの3つの役者がおり、ユーザーはSNSとサービスを信頼して個人情報を預ける必要があります。

この認証スキームをuPortを使った場合で考えると、

f:id:lotz84:20180711174922p:plain:w400

この様にuPortがIdentity Providerとなり、 uPort 自体はブロックチェーン上で動いているので特定の機関を信頼する必要がなく、秘密鍵を所持しているユーザーが自分の個人情報を完全にコントロールできるようになるというわけです。

uPort からはアカウントを簡単に管理できるようにアプリもリリースされています。

uPort ID

uPort ID

  • Consensus Systems LLC
  • Utilities
  • Free

サービスの連携フロー

uPort ドキュメントのGUIDEに書かれているサービスとの連携フローについて紹介します。

Requesting Credentials

まずは図でも説明したサービスに個人情報を提供する流れです。

f:id:lotz84:20180711180637p:plain

図の出典: Requesting Credentials | uPort Developer Portal

図はデスクトップウェブと連携する流れを想定しています。

  1. アプリが認証用のQRコードを表示します
  2. アプリは1と同時にChasqui(後述)にポーリングします
  3. ユーザーはモバイルでQRコードをスキャンします
  4. ユーザーが同意したらChasqiにその情報が送られます
  5. アプリはChasqiからデータを受け取ります

Chasqiはセッションを利用したデータの授受を管理してくれるサービスでuPortが開発しているAWS Lambda上で動くサービスです。

GitHub - uport-project/lambda-chasqui: 🏃 Messenger service 🏃

使うときは自分でAWSにデプロイして使います。

Attesting Credentials

次にAttestingの流れです。Attestingはアプリ側が作成したデータをユーザーに署名してもらうためのフローです。例えばアプリ側で新たに入力してもらった個人情報に署名してもらってuPortのアカウントと紐付けるなどですね。

f:id:lotz84:20180711210538p:plain

図の出典: 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 ログインを実装すると便利になりそうですね。