Open4

VRヘッドセット内でWebアプリをどうやって認証すんのか問題

okuokuokuoku

前回WebXRアプリをPICO4で動かせたけど、WebXRはHTTPSでないと使えないのでテスト用アプリも基本的にインターネットに公開して試すことになる。

これ地味に問題なのでは。。PICO4のブラウザは他のプラットフォームとのパスワード同期をサポートしておらず、かつ、Googleのstoreが無いので1Passwordのようなパスワードマネージャも導入できない。で、

  • PICO4を提供しているPico ImmersiveはBytedance傘下であり、そのtiktokは割とセキュリティについては良い評判を確立していない
  • そもそも本体OSをどの程度信用していいのかわからない -- 開発者から見ると単なるAOSPデバイスだがどのような改造がOSに入っているのかは判然としない
  • 証明書マネージャ的な機能が本体側に無いので"信頼済証明書"の編集もできない(せめてroot証明書の一覧くらい見せてくれても良いんでは。。)

prev

https://zenn.dev/okuoku/scraps/fb64a8322e7583

okuokuokuoku

現状

現状は Cloudflare Zero TrustのOAuthプロキシ(access)とOktaの2要素認証であるOkta verifyを組み合わせている。

  1. PICO4: テストするWebXRアプリ(httpsサイト)にアクセスする
  2. PICO4: Cloudflare Accessのログイン画面が出る
  3. PICO4: Oktaの認証画面でOkta verifyにpushを送信する
  4. PICO4: ヘッドセットの横を2回殴ってシースルーモードにする
  5. 携帯電話: Pushが届くのでボタンを押す -- シースルーモードの解像度でもギリギリ操作できる
  6. PICO4: アプリにログイン

当然、PICO4でのテスト用に 専用のアカウントをどうでも良いパスワードで 発行している。このため、パスワードが勝手にどこかに同期されたりしていても、2要素認証としてのOkta verifyは通過できないので安全になる。

...いやまぁCookieが盗まれたりしてたらダメだけど、さすがに常識的なプライバシーを考えるとそこまでやっている可能性は相当に低いのではないだろうか。

Cloudflare accessは専用のdaemonを入れたホストの任意のポートをhttpサーバと見做して公開できるため、そのホストにsshポート転送すれば、前回のngrok(SSH版)と同じように使える。

https://zenn.dev/okuoku/scraps/aea5d27efc94a7

ただ、accessはCloudflare製品に割と精通してないと正常に設定できないんじゃないかという気がするのであんまりお手軽ではない。例えば、Access経由で公開するWebサイトはCloudflareのキャッシュが自動的に適用されるため、正常なhttpキャッシュヘッダを送出しないと謎な挙動になるし、そもそもCloudflareは独自ドメインを持っていないと使用できない。

okuokuokuoku

現実解

  • 入力したパスワードが他人にバレることは常識的に考えてたぶん無いので、
  • 16文字くらいの どうでも良い パスワードを設定し、我慢して入力しろ

PICO4側のブラウザに覚えさせる前提を採る。万一PICO4側に脆弱性があって入力したパスワードが漏洩しても、VR以外のパスワードが侵害されていなければそれで良いということで。。

逆に言えば、本物のアカウント(GitHubとか)を使うのはあんまりかしこくないと思う。

okuokuokuoku

理想

Push APIとWebAuthnを組み合わせて携帯電話のブラウザで認証をさせ、携帯電話とPICO4のペアリングはPINで行う ...のが理想だけど、そもそもPush APIをこの目的に使ってる例って多分無いよね。。