2017-05-29 90 views
0

我有一個火力帳戶,我手動創建誰將會體健用我的網站的用戶(註冊是不公開的,但它是不相關的這項調查)如何驗證Firebase令牌服務器端?

在登錄頁面,則認證通過JavaScript的。
一旦用戶輸入他們的郵件和密碼,相應的功能就會被執行,我得到令牌,然後通過url重定向將它發送到我的PHP服務器。事情是這樣的:

firebase.auth().signInWithEmailAndPassword(inputemail, inputpassw) 
    .then(function(user) { 

     myEmail = user.email; 
     myUid = user.uid; 

     user.getIdToken() 
      .then(function(token){ 
       myToken = token; 

       location.href = "http://www.example.com/verify?email="+myEmail+"&token="+myToken+"&uid="+myUid; 

      }); 

    }, function (error) { 
     ... 
    }); 

然後,我的服務器上我都會有郵件時,UID,和令牌。
所以,我的問題是:
如何驗證令牌是否有效?是不可能的?
我知道令牌是加密的,但密鑰是公開的......所以任何人都可以製作一個有效的令牌!
我的意思是,比如,我有一個過期的令牌,我可以對其進行解碼,更改過期時間,再對其進行編碼,並獲得到我的服務器不知道任何密碼

有我丟失的東西?

顯然我無法通過REST驗證令牌。
我還有什麼替代方案?

+0

無需調用火力地堡服務器,驗證ID令牌。所有信息都在令牌本身中,並且可以使用服務憑證進行解碼。請參閱https://stackoverflow.com/questions/42084299/firebase-token-verification-in-php和https://stackoverflow.com/questions/37634305/firebase-token-verification和https://packagist.org/packages/firebase/php-jwt –

+0

您是否閱讀完整的問題? –

+0

顯然不是。然後再次:我給出的鏈接提供了問題標題的確切答案,用PHP驗證了JWT。如果你問爲什麼這是一種安全的方法,我建議更新標題以反映這一點。這是一個有效的問題,與你的標題目前的要求不同。答案是btw,指出JWT要求您有權訪問該項目的憑據。由於這些是私密的,只有有權訪問他們的人才能創造有效的令牌。 –

回答

0

從火力地堡Documentation

的火力地堡管理員SDK具有用於驗證和解碼ID令牌的內置的方法。 如果提供的ID令牌具有正確的格式,未過期並且簽名正確,則該方法會返回已解碼的ID令牌。您可以從解碼的令牌中獲取用戶或設備的uid。

所以,你不必擔心有人試圖生成假的令牌。

要驗證令牌在PHP中,得到Firebase Admin SDK for PHP

最少的代碼驗證令牌:

use Kreait\Firebase; 

$firebase = (new Firebase\Factory())->create(); 
$tokenHandler = $firebase->getTokenHandler(); 

//get a token from client 
$idTokenString = 'eyJhbGciOiJSUzI1...'; 

$idToken = $tokenHandler->verifyIdToken($idTokenString); 
$uid = $idToken->getClaim('sub'); 
echo $uid; 
+0

我重複了我所說的話:「如果我發現過期的令牌,我可以解碼它,更改過期時間,再次對其進行編碼,並在不知道任何密碼的情況下訪問我的服務器。「我其實,這是我做了什麼和它的工作,所以我認爲現在唯一的解決辦法是生成我自己的令牌 –

+0

同樣,你可以解碼用公鑰令牌,但你不能用公鑰編碼。如果你用公鑰對它進行編碼,然後令牌驗證在你的服務器上失敗,我認爲它適用於你的情況,因爲你有公鑰和私鑰,但是世界其他地方沒有你的私鑰,如果你仍然認爲你可以做到這一點,然後寫一封電子郵件給谷歌,你智取他們! – Mann