Skip to content

認証デバイスを Web Push(PWA)で代替できるようにする(ネイティブ開発環境を不要にする) #205

Description

@OsscJpDevInfra

概要

CIBA の承認端末を、Web ブラウザ(PWA)の Web Push で代替できるようにしたい。
現在の認証デバイス(authentication_device、Flutter)は、実機で確かめるのに
Android / iOS のビルド環境と署名・配布の手当てが要る。確認したいのは CIBA の承認フローだけで、
そのためにネイティブの開発環境を用意するのは重い。

現状

下地は既にある。 測った結果は次のとおり。

箇所 状態
lib/configs/app_fcm.dart:19 vapidKey = '<YOUR_PUBLIC_VAPID_KEY_HERE>'(プレースホルダ)
lib/components/appauth_page.dart:93 getToken(vapidKey: AppFcm.vapidKey)Web Push 用の呼び出し形(VAPID は Android / iOS では無視される)
web/ index.html / manifest.json / アイコン 192・512 が存在(Flutter の web ターゲット)
README.md web / VAPID への言及は無い

サーバ側は無改造で済む見込み。 CommonLibrary/Notifications/FcmService.cs:103-125
Notification + Data + Token だけを設定し、Webpush / Android / Apns はコメントのまま。
FCM は Web の登録トークンも同じ Token で配信するため、
/SetDeviceTokendevice_token)と /ciba_resultauth_req_id)の口も現状のまま使える。

E2E テスト側は、既にプッシュを送信箱(FcmOutboxDirectory)のファイルで代替している(#196)。
本件はテストの代替ではなく、人が実機相当で触る手段を増やすもの。

対応

  1. firebase_messaging の web 初期化と Service Worker(web/firebase-messaging-sw.js)を追加する
  2. VAPID 公開鍵を設定で渡せるようにする(現在はソース内のプレースホルダ)
  3. web/manifest.json を PWA として成立する内容にする
  4. HTTPS で配信する手順を README.md に書く(Web Push は localhost 以外で HTTPS が必須)
  5. 既存の Android / iOS 経路は壊さない(同じ lib/ を共有し、web を足すだけ)

制約を明記しておく。

  • iOS の Web Push は、PWA をホーム画面に追加した場合のみ(Safari 16.4 以降)。
    「ネイティブ不要」が全プラットフォームで成り立つわけではない
  • /ciba_result は、承認が当該ユーザ宛ての要求かの確認が入っていない。
    承認端末を増やす前に、そちらの手当てが別途必要(別途報告済み)

検証

  • flutter build web が通ること
  • ブラウザで登録トークンが取れ、/SetDeviceToken に登録できること
  • CIBA 要求でプッシュが届き、Allow / Deny が /ciba_result に届いて、
    クライアントがトークンを取得(または access_denied)できること
  • 既存の E2E(EX-8 / RT-196)が通ること。送信箱による代替は変えない

利用者への影響

無し。 認証デバイスはサンプル / テスト用で、製品の動作は変わらない。
サーバ側に変更が入らない見込みのため、既存のネイティブ アプリもそのまま動く。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions