4

この問題はここでたくさん聞かれましたが、私はまだ問題を解決できる正確な答えを見つけることができないようです。node.jsでトークンを作成すると、Firebase REST auth admin sdk

私は、access_tokenパラメータを追加することで、REST呼び出しを使用してFirebaseにアクセスしたいと考えています。

access_tokenは、次のコードを使用して、Node.jsの管理SDKを使用して作成されます。

var admin = require("firebase-admin"); 

var serviceAccount = require("./pk.json"); 

admin.initializeApp({ 
    credential: admin.credential.cert(serviceAccount), 
    databaseURL: "https://XXX.firebaseio.com" 
}); 

var uid = "1234"; 


admin.auth().createCustomToken(uid) 
    .then(function(customToken) { 
    // Send token back to client 
    console.log("Token: "+customToken); 
    }) 
    .catch(function(error) { 
    console.log("Error creating custom token:", error); 
    }); 

問題は、私はNode.jsのから作成されたトークンを取り、それを私のREST呼び出しを使用している場合、I Unauthorized requestエラーが発生します。

トークンを発行するときにスコープのパラメータを追加したが、Node.js Admin SDKでそれを行う方法が見つからないという質問がいくつかあります。

Googleのドキュメントにはこの問題が詳しく記載されていません。私はこの問題を解決しようとしているかもしれません?

答えて

5

Firebase REST APIの認証に使用しているトークンは、正しいトークンタイプではありません。 Firebase Authカスタムトークンを使用しています。これは、Sign in using custom tokens on clientsで説明されているように、signInWithCustomToken()メソッドを使用してFirebaseクライアントSDKの1つを認証するためにのみ使用できます。

Firebase REST APIを認証するには、Firebase IDトークン(ユーザーベースのアクセス用)またはGoogle OAuth2アクセストークン(管理者用アクセス用)の2つのオプションがあります。 Firebase IDトークンによる

認証

は、様々なFirebase、クライアントSDKにアクセストークンを取得する方法については、Retrieve ID tokens on the clientを参照してください。また、IDトークンをFirebaseカスタムトークンを交換し、文書化されていないREST APIを介してトークンペアをリフレッシュすることができます。

エンドポイント:https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken?key=<API_KEY>

方法:POST

リクエストボディ:{ "token": <CUSTOM_TOKEN>, "returnSecureToken": true }

<API_KEY>は、Firebaseコンソールから取得した同じAPIキーです。 Firebaseクライアント。 <CUSTOM_TOKEN>はFirebaseカスタムトークンです。

IDトークンは時間後に期限切れので、あなたは、この他のドキュメント化されていないREST APIを介してそれらをリフレッシュするためにリフレッシュトークンを使用する必要があります。

エンドポイント:​​

方法:POST

リクエストボディ:{ "refresh_token": <REFRESH_TOKEN>, "grant_type": "refresh_token" }

<API_KEY>は以前と同じAPIキーです。 <REFRESH_TOKEN>は、前のAPI呼び出しからのリフレッシュトークンです。

IDトークンを取得したら、照会パラメータauthを介してREST APIに渡して、リクエストを認証できます。この要求は、クライアントにログインしたエンドユーザが要求を行っているかのように、Firebaseセキュリティルールを尊重します。グーグルのOAuth2アクセストークンを認証するために、Googleのアクセストークン

認証、最初にやるべきことは1を取得することです。これを行う方法については、Retrieving an access tokenを参照してください。現在のところ、Javaの例しか含まれていませんが、これはNode.jsを含む多くの言語で可能ですIDトークンを取得したら、クエリパラメータaccess_tokenを使用してリクエストトークンをREST APIに渡して、リクエストを認証できます。この要求は管理者のアクセス権で行い、すべてのFirebaseセキュリティルールを無効にし、完全な読み取りと書き込みアクセスを許可します。

+0

私が正しく理解していれば、クライアントSDK(サーバーのREST)なしでIDトークンを取得する方法はありませんか? – Ran

+0

実際には、使用できる文書化されていないREST APIがあります。私は実際に私たちの公式ドキュメントでこのREST APIの文書化に取り組んでいますが、私はアンブロックされるまでの間に私の答えを更新しました。 – jwngr

+0

ありがとう@jacobawenger、あなたの指示に従おうとすると、「署名を検証できません」というメッセージが表示されます。 auth paramの値としてid_tokenを使用した後で何が間違っているのでしょうか? – Ran

関連する問題