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