【发布时间】:2017-10-30 02:28:13
【问题描述】:
我有一个 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 服务器来验证 ID 令牌。所有信息都在令牌本身中,并且可以使用服务凭证进行解码。见stackoverflow.com/questions/42084299/…和stackoverflow.com/questions/37634305/…和packagist.org/packages/firebase/php-jwt
-
您阅读完整的问题了吗?
-
显然不是。再说一遍:我提供的链接提供了您问题标题的确切答案,验证了 PHP 中的 JWT。如果您问为什么这是一种安全的方法,我建议您更新标题以反映这一点。这是一个有效的问题,与您的标题当前提出的问题不同。答案是顺便说一句,铸造 JWT 要求您有权访问项目的凭据。由于这些是私有的,因此只有有权访问它们的人才能铸造有效的令牌。
-
我不知道“mint JWT”是什么......你的“项目凭证”是什么意思......我使用 Firebase 控制台......它在那里吗?
-
有关如何使用第三方 JWT 库验证 Firebase ID 令牌的更多信息,请参阅 firebase.google.com/docs/auth/admin/…。
标签: php rest authentication firebase firebase-authentication