追記
2017年5月17日にFirebase Admin Python SDK v2.0.0がリリースされ、一部の呼び出し方法が異なっていたので補足として追記しています。
概要
2017年4月4日(日本時間だと4/5早朝ごろ)にGoogle公式からPythonのFirebase SDKがリリースされました。正式名称は「Firebase Admin Python SDK」で、その名の通りAdmin周りのAPIがサポートされているSDKになります。
Firebase Admin Python SDK でできること
その名の通り(二度目)Admin周りの処理が提供されています。とは書いたものの、リファレンスやガイドを読んだところ現在用意されている機能は「サービスアカウントの秘密鍵からCustomTokenやAccessTokenを作る部分のみ」のようです。
使い方
Add the Firebase Admin SDK to your Server | Firebase
上記に書いてある内容をそのままなぞっていきますが、そのままだと詰まる箇所があるので要注意。
まず初めに、秘密鍵を取得します。
Firebaseのコンソールサイト( https://console.firebase.com/ )から該当のプロジェクトを開き、メニューのOverview横にある歯車>プロジェクトの設定>サービスアカウントまで移動し、画面下部にある「新しい秘密鍵を生成」ボタンを押してjsonファイルを取得します。
そして必要なライブラリをpipでインストールしておきます。
$ pip install firebase-admin
コードはこんな感じです。
v1.0.0
import firebase_admin
from firebase_admin import credentials
def getToken:
credential = credentials.Certificate('./serviceAccountKey.json')
scopes = [
'https://www.googleapis.com/auth/firebase.database',
'https://www.googleapis.com/auth/userinfo.email'
]
# access_tokenの取得
accessTokenInfo = credential.get_credential().create_scoped(scopes).get_access_token()
print("access_token:" + accessTokenInfo.access_token)
print("expire:" + str(accessTokenInfo.expires_in))
if __name__ == '__main__':
getToken()
公式のドキュメントとの違いは、firebase_admin.initialize_app()
を使わずにcredentialにスコープを設定し、そのままAccessTokenを取得するようになっています。
v2.0.0
import firebase_admin
from firebase_admin import credentials
def getToken:
credential = credentials.Certificate('./serviceAccountKey.json')
# access_tokenの取得
accessTokenInfo = credential.get_access_token()
print("access_token:" + accessTokenInfo.access_token)
print("expire:" + str(accessTokenInfo.expiry)) # 「20XX-XX-XX XX:XX:XX.XXXXXX」が返る
if __name__ == '__main__':
getToken()
v1.0.0との違いはget_credential()
でクレデンシャル情報を一度取得する必要や、スコープの設定をする必要がなくなりました。
また、有効期限の内容がv1.0.0は残り時間の秒数だったのに対し、v2.0.0からはプロパティ名がexpiry
となり、利用可能な期限がdatetimeオブジェクトで返ってくるようになっています。
取得したtokenでRealtime Databaseにアクセス
RealtimeDatabaseで利用する場合は、パラメータのaccess_token
に入れることでアクセスができるようになります。なお、このAccessTokenはサービスアカウントによって作られているため、 データベースのルールで全ユーザーがfalseになっているものも全て読み書きが可能となるので、扱いには注意しましょう。 ちなみにトークンの有効期限は発行から1時間です。
https://{FIREBASE_PROJECT_ID}.firebaseio.com/hoge.json?access_token={FIREBASE_ACCESS_TOKEN}
CustomTokenに関しても同様のやり方で取得できるかとは思いますが、AccessTokenの取得が正しくできた時点で自分にとって必要なものではなくなったので、未検証のままです。