認証&アクセス制御
先に講義をしてから、このページにてFirebase 操作について、次のページでプログラムを解説します。
Authentication の有効化
firebase console で、構築→Authentication を選択してください。開始すると、Sign-in method があると思うので、今回は メール/パスワード を利用します。
「追加のプロバイダ」というのは利用可能な OAuth 認証サービス群ですね。
メール/パスワードの中のメール/パスワード を有効にして保存してください。
そのあとは、上側のタブのUsers からユーザを追加します。
自分の持っている(紛らわしいので firebase 用 google accout とは別の方がいいです)メールアドレスと、「新規につくった」パスワードを登録しましょう。プログラム中に保存したり、間違って露出することもあるでしょうから、他で使っているパスワードは使わないようにしましょう。
認証用 REST API
認証(認可)用 REST API もあり、メールアドレスとパスワードをつかって access token を取得することができます。
- method:
POST - URL:
https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=...- key として渡すのは、firebase project の Web API Key です。
- 取得方法がちょっとややこしくなったので後述
- 演習時はこちらの動作デモを行う予定
- メッセージ本体:以下のような JSON データを送ります。メールアカウントとパスワードは上で登録した者です.
{
"returnSecureToken": true,
"email": "YOUR_EMAIL_ADDRESS",
"password": "YOUR_PASS_WORD"
}
レスポンスに以下のようなものが返ってくれば正解です。localId は uid 相当で、idToken が欲しかったデータです。
{
...,
"localId": ...,
"email": ...,
"idToken": ...,
...
}
idToken は JWT なので、payload の中身をみてみるとこんな感じ。こちらにも user_id などの形で uid 情報が入っています。 iat, exp は発行時刻や expire ですね。
JWT は firebase 側が発行したサイン付きなので、realtime DB はサインを確認して内容を信頼する訳です。
{
"iss": ...,
...,
"user_id": ....,
"sub": ...,
"iat": ...,
"exp": ...,
...
}
このあたりも、実際に REST API を発行して試してみるとよいでしょう。
Realtime DB + AccessToken
上記で取得したアクセストークンを realtime DB の REST API に付与すれば、realtime DB は利用者の認証情報が利用できるわけです。
GET, POST, PUT などの URL パラーメータに auth=token の形で渡せば大丈夫です。
つまり、URL: https://docs-examples.firebaseio.com/fireblog/users.json だったところを、 https://docs-examples.firebaseio.com/fireblog/users.json?auth=token (token のところは、実際のながーい JWT トークンで置き換え)としてアクセスすれば OK です。
こちらも REST API を発行して試してみるとよいでしょう。
セキュリティルール
Realtime DB のセキュリティルールは、firebase console の「ルール」タブに記載されています。 当初はテストモードで、read, write アクセスが時限ですべて許可されていました。
例えば、
/protected/users/uid0
に書込みできるのは uid0さんだけだけど、
認証済みユーザならどこでも読み込み可能って感じのルールを適用したければ、
セキュリティルールをこんな感じにすれば OK です。
{
"rules": {
"protected": {
"users": {
"$uid": {
".write": "$uid === auth.uid"
}
}
},
".read": "auth.uid !== null"
}
}
詳しいルールの説明はこちらをみてください。
WebAPIKey の取得方法
- Firebase のコンソール画面で,左上のプロジェクトの概要の「歯車」アイコンを選択し,「プロジェクトの設定」を確認します.

- マイアプリで Web API を選択

- 引き続く設定をおこなう
- マイアプリ名は適当で構いません (例:
cloud25appとか) - hosting は不要です
- アプリを登録します
- 以下のような出力があり,apiKey が Web API Key です.
- 普通は各環境に応じて
firebaseConfig全体をコピペして利用するのですが,今回は apiKey だけ取得できればそれでOKです.
- 普通は各環境に応じて
- アプリ登録が終わったので,「x」ボタンを選択するか「コンソールに移動」するかで,元に戻れます.
const firebaseConfig = {
apiKey: ...,
...
};