2016-08-23 59 views
3

我想通過共享JWT令牌對多個網站上的用戶進行身份驗證。該標記最初由firebase生成,因此我認爲它是一個很好且有效的標記(在jwt.io上測試,似乎很好)。我通過user.getToken()得到它。signInWithCustomToken()帶有Firebase自己的令牌

當我打電話給signInWithCustomToken(token)時,我總是收到一個錯誤auth/invalid-custom-token,並附有信息"The custom token format is incorrect. Please check the documentation."

奇怪的是,它做了一個HTTP POST請求到https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken...,它返回HTTP 400.我嘗試過本地主機和https網站上的活動......但結果相同。我正在使用Firebase 3.3。

任何想法,有什麼可能是錯的?我在舊版Firebase中使用了此功能。

回答

1

你不提供任何代碼片段,所以我要在這裏進行推測。

我假設您使用node.js來生成自定義標記。在您的節點腳本 試試這個:

var firebase = require("firebase"); 
var adminConfig = { 
    serviceAccount: "serviceAccountCredentials.json" 
}; 
var adminApp = firebase.initializeApp(adminConfig, 'admin'); 
var token = adminApp.auth().createCustomToken('12345678', { 
    customField: 'customValue' 
}); 

然後在客戶端上嘗試signInWithCustomToken(令牌) 確保客戶端使用屬於哪裏產生的服務帳戶在同一個項目相同的API密鑰。

+0

謝謝,但我沒有生成令牌,該令牌由Firebase本身生成並通過authData(firebase.user)發送給我。代碼片段是'onAuthStateChanged(function(user){...})'回調函數中的'user.getToken()'。所以令牌不是自定義的,它是Firebase自己的令牌。在Firebase 2.x中,該函數被稱爲'authWithCustomToken',並且與非定製(原始)令牌一起工作。 – Tom

+1

如果我錯了,請糾正我的錯誤:您正嘗試使用Firebase ID令牌登錄。你不能這樣做。這不是自定義標記。自定義令牌通過signInWithCustomToken交換爲firebase id令牌和刷新令牌。您正嘗試使用Firebase ID令牌在我假設的單獨設備中登錄。這是不可能的。 – bojeil

+1

在https://firebase.google.com/docs/reference/js/firebase.User#getToken中,沒有人將其稱爲「ID令牌」,但您說得對,即在https://firebase.google.com/docs/中auth/server/verify-id-令牌,它是一個「ID令牌」。但是,如果任何自定義服務器後端可以驗證它,爲什麼Firebase本身不能。我沒有看到它們之間的區別,因爲文檔中提到「用於將用戶標識爲Firebase服務的JWT令牌」。它曾經在Firebase 2.x中工作。無論如何,謝謝你的幫助。 – Tom