認証&アクセス制御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を実行してみましょう。 - 時間があれば、書き込みができない場所へのアクセスが、きちんと拒否されることを確認し、その時の返り値も確認しましょう