[英]How can I get this Google Login ID Token from this Android app to verify server-side?
[英]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.