認証&アクセス制御2 (P)

Python 版プログラム

ライブラリの追加 (JWT) があるので、pip の追加を忘れずに。

注: pip でパッケージ名を指定する場合は jwt ではなく pyjwt になります。

重要: 実行前に以下の箇所を変更してください。

  • プログラム (request_auth_sample.py)
    • webAPIKey: 取得した firebase project の web API key を入力してください。
    • baseURL: 各自の Realtime DB の base URL を入力してください。
  • 一般ファイル
    • account/request.json: 実験で利用するアカウントのメールアドレスとパスワードを記入してください。

プログラムの簡単な解説

  • TokenManager: get_token(), get_token_user() などを提供。皆さんが中身を理解する必要はなく、使うだけ。

    • account/request.json の情報をつかって認証をおこなう。一度取得したトークンは account/token.jwt に配置する。
    • get_token(): 利用可能なトークンを返す。すでにトークンを持っている場合は、再利用するが、expire されている場合は再取得する。
    • get_token_user(): トークンを利用したユーザの firebase における user id を返す。セキュリティルールの auth.uid に相当する。
  • UserDBService: 前回同様、RealtimeDBにアクセスするメソッド。

    • get(), put()のパラメータに token が加わる
  • request_sample(): 簡単な利用例です

    • まず、TokenManager()manager を生成して、 get_token(), get_token_user() でトークンおよび uid を取得する。
    • あとは、前回同様 UserDBService にアクセスするだけ。

複数アカウントを切り替えて実験をしたい方へ

申し訳ないですが,上記 TokenManager は,現状アカウント切替えを想定していません. そのため,一度認証をすると,account/token.jwt を作成し,その後,expire 時刻になるで,認証をサボるように実装されています.

アカウントを切り替える際は,account/request.json を変更すると同時に,上記 account/token.jwt をファイル削除してから,プログラムを実行させてください.

実装変更するのは簡単なのですが,すでに課題に取り組んでいる学生と conflict を起こしそうなので,2026年度版で修正しておきます (reset() を実装するぐらいの対応になると思いますが).

練習問題 D

準備段階

  • まずは認証機構の設定とアカウント登録をおこなう
  • セキュリティルールの登録をおこなう
  • JWT token なしでは database にアクセスできなくなったことを確認しましょう

問題:プログラムを介して、アクセス制御の確認をしてみましょう。

  • まずは、request.json にログイン情報を入力、また、webAPIKey および base_url を更新して、request_auth_sample.py を実行してみましょう。
  • 時間があれば、書き込みができない場所へのアクセスが、きちんと拒否されることを確認し、その時の返り値も確認しましょう