繁体   English   中英

如何验证 Firebase 令牌服务器端?

[英]How can I verify firebase token server side?

我有一个 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 验证令牌。
我有什么选择?

来自 Firebase 文档

Firebase Admin SDK 具有用于验证和解码 ID 令牌的内置方法。 如果提供的 ID 令牌具有正确的格式、未过期且已正确签名,则该方法返回解码后的 ID 令牌。 您可以从解码的令牌中获取用户或设备的 uid。

因此,您无需担心有人试图生成假令牌。

验证 PHP 中的令牌,如文档Firebase Admin SDK for PHP 中所述

验证令牌的最少代码:

use Kreait\Firebase;
use Firebase\Auth\Token\Exception\InvalidToken;

//create Firebase factory object
//$firebase = (new Firebase\Factory())->create();

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

try {
    $verifiedIdToken = $firebase->getAuth()->verifyIdToken($idTokenString);
} catch (InvalidToken $e) {
    echo $e->getMessage();
}

$uid = $verifiedIdToken->getClaim('sub');
$user = $firebase->getAuth()->getUser($uid);
echo $user; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM