2016-05-25 9 views
7

私は新しいデータベースと3.0クライアントライブラリに移行します。私はPATCHを実行してFirebase DB内のリソースを更新するカスタム認証トークンを生成する部分を更新しています。これに基づいてadmin請求使っFirebaseする当社のサーバーによってなされるために使用カスタムトークンを使用してFB DBへのREST要求を管理者として作成

これらのPATCHリクエスト:

:新しいDBについては https://www.firebase.com/docs/rest/guide/user-auth.htm

は、私はこのような(ruby-jwtを使用して)JWT・トークンを生成しています

payload = { 
    aud: "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit", 
    claims: custom_claims.merge({ admin: true }), 
    exp: now_seconds + (60 * 60), # Maximum expiration time is one hour 
    iat: now_seconds, 
    iss: service_account_email, 
    sub: service_account_email, 
    uid: uid 
} 

JWT.encode(payload, private_key, "RS256") 

PATCHこのトークンをFirebase DBに要求すると、次のエラーが発生します。Missing claim 'kid' in auth header

+0

クロスポスト:https://groups.google.com/forum/#!topic/firebase-talk/XTJfiltow-I –

答えて

1

はルビーgoogleauthモジュールを使用してマイケルBleighの答えと同等です:

require 'googleauth' 

scopes = [ 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/firebase.database'] 
auth = ::Google::Auth.get_application_default(scopes) 
auth_client = auth.dup 
auth_client.sub = "[email protected]" 
token = auth_client.fetch_access_token! 

あなたはまた、あなたのサービスアカウントのJSONファイルのパスにGOOGLE_APPLICATION_CREDENTIALS環境変数を設定する必要があります。 auth_client.subの値はこのJSONファイルのclient_emailからです。

もちろん、上記のように、これはあなたが制御するサーバーアプリケーションでのみ有効です。

また、firebase REST APIへのリクエストの作成は、まだ読者のための課題です。

参照

14

新しいFirebaseでは、サービスアカウントを直接使用して管理アクセス認証情報を作成する必要があります。ここでは、データベースへのREST呼び出しを作成する方法を示しNode.jsのスニペットです:

// key.json is a service account key downloaded from the Firebase Console 
var key = require('./key.json'); 

var google = require('googleapis'); 
var request = require('request'); 

var DATABASE_URL = 'https://<databaseName>.firebaseio.com'; 

var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, [ 
    'https://www.googleapis.com/auth/userinfo.email', 
    'https://www.googleapis.com/auth/firebase.database' 
]); 

jwtClient.authorize(function(err, tokens) { 
    request({ 
    url: DATABASE_URL + '/.json', 
    method: 'GET', 
    headers: { 
     'Authorization': 'Bearer ' + tokens.access_token 
    } 
    }, function(err, resp) { 
    console.log(resp.body); 
    }); 
}); 

はRubyで同じことを行うには、あなたは、サービスアカウントの資格情報を使用してアクセストークンを取得するためにgoogleauth gemを見てかかることがあります。ここで

+0

はですFirebase 2.xのカスタムRESTトークンのような、自分のデータベースルールからアクセス可能なカスタムクレームを含めることは可能ですか? – user1881056

+0

カスタムのクレームを 'auth_variable_override'クエリパラメータとともに追加できます(有効なJSONオブジェクトにするだけです)。 –

+0

RESTリクエスト自体のクエリパラメータを意味していますか?どのように安全ですか?私のクライアントは信頼できません(IoTデバイス)、Firebase DBへのアクセスを制限する安全な方法が必要です。実際、この(明らかに文書化されていない)機能は私のセキュリティモデル全体を吹き飛ばしています。私はあなたが誤解されていることを願っています! – user1881056

関連する問題