Firebase や Google Cloud Platform(以下GCP) を使ってみたときのTIPSをいくつか記事にしてるんですが、初回のサインアップなどの環境構築を記事化するのをサボってたので、その備忘。
の、はしょっていたところの補足メモの位置づけ。。
背景
発端はFirebaseのWEBアプリでFirebase認証のGoogleアカウントでログインする機能1を使おうとしてて、
- あれ、FirebaseのapikeyってHTML/JS内に書かれちゃうけど漏れちゃっていいんだっけ?
- ん?てかそもそもGoogle認証のClientID/ClientSecretっていつ払い出されてんだっけ?
などなど、インフラ化・自動化されてるがゆえに隠されていてわからないところが気になってしまって。
んじゃ、そもそもサインアップから環境を作り直してみるか、ついでにメモっておくか、、、というのが、が背景です。
なので最終的には、FirebaseのGoogle認証におけるOAuthクライアント機能について、GCP内のOAuthの機構とどういうつながりになってるかや、**apikey 漏れるけど、実際なにかマズイんだっけ??**などを整理してみようとおもった、第一回目の記事。
今回はFirebaseとGCPへのサインアップ作業と、GoogleログインするときのFirebaseとGCPの関連の整理、あとは
const firebaseConfig = {
apiKey: "AIzaSyBhRB23I7wUQCMhgFP5At2P5-TyJ93ii9k",
authDomain: "fb-samples.firebaseapp.com",
databaseURL: "https://fb-samples.firebaseio.com",
projectId: "fb-samples",
storageBucket: "",
messagingSenderId: "1027493386569",
appId: "1:1027493386569:web:2124601897bd1b97"
};
などapikeyなどを生成するところまで、をやってみます。
Firebaseのサインアップ
というわけでFirebaseのサインアップ。
https://firebase.google.com/ へアクセスし「使ってみる」をクリック
Firebaseのサインアップが完了。さっそくプロジェクトを作成します。「プロジェクトを作成」をクリック
プロジェクト名をつけます。今回は「fb-samples」としました。「続行」をクリック
Google Cloud Platform (GCP)のサインアップ
つづいて Google Cloud Platform です。
https://console.cloud.google.com へアクセスし、アカウント情報を入力。
サインアップできたようです。うえの「My First Project」をクリックしてみると、、、
先ほどFirebaseで作成したプロジェクト「fb-samples」と同じ名前のプロジェクトがすでに作成されていることがわかります。
GCPをサインアップした時にあらかじめ作成されるプロジェクトではなく「fb-samples」を選んでおきましょう。
認証機能をみてみる
さてさて「Firebaseにサインアップしてプロジェクト fb-samples を作成 」して「GCP側もサインアップが完了」して見てみたら、GCPにもfb-samplesというプロジェクトができていましたね。そのほかにも、実はFirebaseのFunctionsもGCPのCloud Functionsと共通だったり、FirebaseとGCPは密接に結びついています。
またFirebaseの認証機能はいろいろなOAuth Providerを簡単に利用できる機能が組み込まれていますが、もちろんその一つとしてGoogleのOAuthプロバイダを選択することができます。それに使われるOAuthのProvider(OIDC Provider)設定も、GCPのプロジェクト側に自動で作成されていたので、それを確認してみます。
FirebaseのAuthentication
まずはFirebase側から。プロジェクトの管理画面 >> Authentication >> ログイン方法 >> を選択
下記のように「プロジェクトの公開名」が表示される画面になりました。また「ウェブ SDK 設定」をクリックすると
「ウェブ クライアント ID」「ウェブ クライアント シークレット」が表示されました。これはいわゆるOAuthにおけるClientIDとClientSecretです。正確には**「GoogleをOAuth(OIDC) ProviderとしたOAuth ClientであるFirebaseアプリに対して、OIDCプロバイダが払い出したClientID/ClientSecret」** なわけですね。従って、このID/Secretは、GCP側の「fb-samples」プロジェクトのどこかで設定されているはずです。
GCPの認証情報
さてGCP側に移動して、左上のメニューから、 APIとサービス >> 認証情報 を選択します
「OAuth 2.0 クライアント ID」というのが表示されていますね。
名前の「Web client (auto created by Google Service)」をクリックすると詳細を見ることができますが、、
おお、上のほうに
クライアント ID:1027493386569-aoep2scui7vb8pccchavm4a7n2sn1u88.apps.googleusercontent.com
クライアント シークレット:i3jrIseRHBw2U70J4pdz1Sss
が表示されています。この値、**Firebase側で見た 「ウェブ クライアント ID」「ウェブ クライアント シークレット」**になっていますね。うん、たしかに、Firebaseアプリに対して「ウェブ クライアント ID」「ウェブ クライアント シークレット」が自動で払い出されていることがわかりました。。
さらには OAuth/OIDC はOAuthの処理シーケンスにおける「承認済みのリダイレクトURI」をあらかじめ設定する必要がありますが、下のところを見てみると、、、
https://fb-samples.firebaseapp.com/__/auth/handler
が自動的に承認済みに設定されていることがわかります。あとでちゃんと見てみますが FirebaseでOAuth Providerを使ったログインをする際はリダイレクト先が上記のURIとなる2ので、それがあらかじめ設定されているということですね。なるほど。
ついでに 左メニューより 「OAuth同意画面」を見てみると、下記のように「アプリケーション名」が、先のFirebaseの「プロジェクトの公開名」になっていたりすることがわかります。。
などなど。Firebaseの認証機能と Google Cloud Platform のOAuth/OIDC の設定についての整理でした。
Firebaseのプロジェクト内に、アプリを作成する
さてつづいて、Firebaseの「fb-samples」プロジェクト内に、アプリを作成してみます。
左メニューの歯車から「プロジェクトの設定」を選択
プロジェクトの定義が表示されます。ここの「ウェブ API キー」はいわゆる firebaseConfig
の apikeyになります。
下のマイアプリより、タグのアイコンをクリックして、ウェブアプリを追加します
- アプリのニックネームはなんでもOK(app001とかしました)。
- 次のチェックボックスですが、Firebase Hosting(FirebaseのWEBサーバ)にのちに配置するつもりで、チェックをつけます。
- 地球儀のところの文字列は最終的にURLに紐付きます。今回ひとつめのアプリなので「fb-samples」というプロジェクトの名前が自動設定されているので、そのままにしておきます。ちなみにその結果、Hostingした際のURLは
fb-samples.firebaseapp.com
となります。さらにちなみにですが、二つ目以降のアプリは先頭のprefixを世の中でUniqueになるように自分で適宜指定する必要があるみたいです。
WEBアプリにFirebase SDKを追加する説明が。とりあえず次へ。
Firebase CLI (開発マシンでのコマンドラインツール)の説明。とりあえず次へ。
Firebase CLIを使った、Hostingへのデプロイコマンドの説明。とりあえず「コンソールに進む」へ。
登録できたようですね。
さきほどのSDKの説明なども、ここからも確認できそうです。
FirebaseのSDK(JS)を読み込ませる設定1(自動)
FirebaseのSDK(JS)を読み込ませる設定2(CDN)
FirebaseのSDK(JS)を読み込ませる設定3(手動でやるパタン)
ネットのサンプルにもよくあるJavaScript内にapikeyを書いちゃうコードが取得できました。
最後にFirebaseのHostingの設定を見てみます。まだHTMLファイルなどをデプロイしていませんが、ドメイン「fb-samples.firebaseapp.com」「fb-samples.web.app」がすでに割り当てられてるのがわかります。
以上でアプリを追加してfirebaseConfig
を取得するところまで、できました。
ためしに Firebase Hostingへデプロイするための環境構築手順 をやってみて、アプリをデプロイしてみましょう!
上記のサイトはVue.jsを用いてHTMLのサイトを作成しますので fb-samples.firebaseapp.com へデプロイできて、下記のようなVue.jsの画面が表示できればOKです。
以上おつかれさまでした。
まとめ
- Firebase と Google Cloud Platform について、サインアップ方法を整理しました。
- Firebase の Google でログインの機能は、GCPの同名のプロジェクトに設定された OAuth/OIDC プロバイダと連係して設定されていることがわかりました。
- Firebase の一つのプロジェクトで、WEBアプリを1つ作成し、
firebaseConfig
を生成しました。 - apikeyが漏れてもヘーキ?については、少なくとも OAuth ClientのClient Secret などは漏れることはなさそうだけど、まだちゃんと確認できずモヤモヤしています。
-
npm run dev
やfirebase serve --only hosting
などのコマンドで、ローカルでWEBアプリを起動は出来るけど、HostingへのデプロイはちゃんとGoogleアカウントで認証できてないと、できない - Firestoreとかは、apikeyがあると読み書きできてしまいそうなので、Firestoreのルールなど何らかで保護しないとダメ、、。
ですかね。あらためてもう少し、整理してみようと思います。
おつかれさまでした。
関連リンク
- Firebase
- Google Cloud Platform
- FirebaseとGoogle Cloud Platform をさわれる環境を構築する 本記事ではサーバ上のサインアップの話しでしたが、クライアント側の環境構築はこのページを参考に。
- Firebase Hostingへデプロイするための環境構築手順 これをやってみて、アプリをデプロイしてみましょう!