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

时间:2017-05-29 18:04:05

标签: php rest authentication firebase firebase-authentication

我有一个firebase帐户,我手动创建将能够使用我的网站的用户(注册不公开,但与此查询无关)

在登录页面中,身份验证是通过javascript进行的 一旦用户输入他们的邮件和密码,执行相应的功能,我得到令牌,并通过URL重定向将其发送到我的PHP服务器。像这样:

from turtle import Turtle, Screen

positions = [(-3.0, 10.0), (-2.0, 13.0), (0.0, 17.0), (5.0, 23.0), (6.0, 24.0),
    (11.0, 27.0), (22.0, 30.0), (49.0, 31.0), (72.0, 26.0), (116.0, 3.0),
    (135.0, -31.0), (132.0, -52.0), (128.0, -65.0), (122.0, -84.0),
    (109.0, -118.0), (82.0, -158.0), (20.0, -188.0), (-52.0, -181.0),
    (-132.0, -136.0), (-213.0, -45.0), (-244.0, 97.0), (-206.0, 225.0)]

screen = Screen()
yertle = Turtle('turtle')

for target, position in enumerate(positions, start=1):
    yertle.goto(position)

    if target < len(positions):
        yertle.setheading(yertle.towards(positions[target]))


screen.mainloop()

然后,在我的服务器上,我将收到邮件,uid和令牌 所以,我的问题是:
如何验证令牌是否有效?这不可能吗? 我知道令牌是加密的,但密钥是公开的...所以任何人都可以制作有效的令牌! 我的意思是,例如,我有一个过期的令牌,我可以解码它,更改过期时间,再次编码并获得访问我的服务器,而无需知道任何密码

有什么我想念的吗?

显然我无法通过REST验证令牌 我有什么选择?

1 个答案:

答案 0 :(得分:1)

来自Firebase Documentation

  

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

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

验证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;