HTTP APIを使ってFirebase DBにPython webappを書き込もうとしています(Google I/O 2016で発表された新しいバージョンのFirebaseを使用しています)。Firebase DB HTTP API認証:JWTトークンを更新する時期と方法
私の理解では、これまでの書き込みの特定の種類は、私はこのタイプのURLにPOSTリクエストで作られて実現したいということです。
https://my-project-id.firebaseio.com/{path-to-resource}.json
私が欠けている何かがありますauth part:正しく取得した場合は、JWTをHTTP AuthorizationヘッダーのAuthorization : Bearer {token}
として渡す必要があります。
私はサービスアカウントを作成し、その秘密鍵をダウンロードしてJWTを生成するために使用し、リクエストヘッダーに追加してリクエストが正常にFirebase DBに書き込まれました。
これで、JWTの有効期限が切れ、firebase DBに対する同様の要求がすべて失敗しました。
私は新しいトークンを生成するはずですが、問題は次のとおりです。トークンの生成とリフレッシュを処理することを期待していませんでした。ほとんどのHTTP APIリクエストで渡される静的なapiキー私のWebアプリケーションは、stati apiキー文字列をリクエストに追加するだけで、比較的簡単に保つことができます。
トークンの生成と有効期限を考慮する必要がある場合は、Webアプリケーションのロジックが複雑になる必要があります(トークンを保存して、トークンを有効にしていない場合は新しいトークンを生成する必要があるため)私はちょうどすべての要求のための新しいトークンを生成することができます(しかし、これは本当に理にかなっていますか?)。
この点についてはベストプラクティスがあるのか、このトピックに関するドキュメントから何か不足している場合は知りたいと思います。新しいJWTが生成されるすべての要求のために現在
import requests
import json
from oauth2client.service_account import ServiceAccountCredentials
_BASE_URL = 'https://my-app-id.firebaseio.com'
_SCOPES = [
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/firebase.database'
]
def _get_credentials():
credentials = ServiceAccountCredentials.from_json_keyfile_name('my_service_account_key.json', scopes=_SCOPES)
return credentials.get_access_token().access_token
def post_object():
url = _BASE_URL + '/path/to/write/to.json'
headers = {
'Authorization': 'Bearer '+ _get_credentials(),
'Content-Type': 'application/json'
}
payload = {
'title': title,
'message': alert
}
return requests.post(url,
data=json.dumps(payload),
headers=headers)
:
おかげで、 マルコ
補遺
は、これは私が現在実行しているコードです。それは私には最適ではないようです。有効期限のないトークンを生成することは可能ですか?
これはおそらくサーバー側のアクセスですか?あなたが実際にやりたいことは、サービスアカウントから生成されたGoogleアクセストークンを使用することです。 [ここに例があります](http://stackoverflow.com/questions/37539066/how-to-authenticate-in-ruby-via-rest-api/38535125#38535125)Rubyでそれを行う方法について説明します。 –
はい、サーバー側のアクセス用です。私がやったことが質問文に追加されました。すべてのリクエストで新しいJWTを生成しているので、最適ではないと私はまだ感じていますが。サーバー側のアクセスのために、静的な(期限切れでない)トークンを使用することを望んでいました。 –
3.x SDKでは、セキュリティ上の理由から、1つの長命ベアラトークンを許可しなくなりました。 –