我目前正在開發一個由使用Firebase 2.4的Web應用程序調用的firebase 3.0的node.js服務。Firebase 3.0令牌:[錯誤:Firebase身份驗證ID令牌沒有「kid」聲明]
我在我的頭呼叫發送當前用戶Firebase ID token(Auth.$getAuth().token
),並試圖validade此令牌
var idToken = req.headers["x-access-token"];
auth.verifyIdToken(idToken).then(function(decodedToken) {
var uid = decodedToken.sub;
console.log(decodedToken);
}, function(error){
console.log(error);
});
但我發現了:
[Error: Firebase Auth ID token has no "kid" claim]
getAuth():
UPDATE
I'have只是測試生成和服務器端驗證令牌和我得到了同樣的問題。
var auth = firebase.auth();
var token = auth.createCustomToken(userId, {"premium_account": true});
console.log(token);
auth.verifyIdToken(token).then(function(decodedToken) {
console.log(decodedToken);
}, function(error){
console.log(error);
});
有什麼建議嗎?
更新2:[溶液]
在我的情況下的問題是,與AngularFire 2.X.X生成的令牌是不與在我的服務器運行火力地堡3.X.X兼容。所以挖掘到的一些想法的人寫在這裏和this google group topic後的解決方法是使用jsonwebtoken如下:
var jwt = require('jsonwebtoken');
jwt.verify(idToken, fbKey, function(err, decoded) {
if (!err){ console.log(decoded); }
});
您可以找到fbKey
訪問新的火力點控制檯,進入設置 - >項目設置 - >數據庫。
這看起來並不像使用3.0造了一個令牌。你不能混合和匹配象這樣的不同版本的令牌。不要試圖以服務器身份作爲用戶身份進行身份驗證,而是讓已通過身份驗證的用戶寫入數據庫中的安全路徑。讓服務器監控路徑。然後,您可以跳過RESTful服務和安全性(如果它們可以寫入需要身份驗證的安全路徑,則它們經過身份驗證和驗證)。因此,你可以繞過這整個混亂。 – Kato
@Kato不錯。但那很奇怪。我在這裏做了一個測試,試圖在服務器端生成一個簡單的令牌,並使用相同的'verifyIdToken'來驗證該令牌,並且即時獲取相同的錯誤。它似乎不是一個兼容性問題。無論如何,你有沒有設置你剛剛提到的有關數據庫安全路徑的例子? – adolfosrs
我也遇到了這個問題,並嘗試像您一樣進行服務器測試。在此處查看我的問題 - [錯誤:Firebase身份驗證ID令牌對Firebase 3.0沒有「kid」聲明] [1] [1]:https://groups.google.com/forum/#!topic/firebase-talk/ajMAi1RSsMA 看起來(令人困惑地)由createCustomToken生成的令牌與傳遞給verifyIdToken的令牌不同。 –