服务器端Firebase + PHP中的电话身份验证

时间:2019-03-12 12:11:02

标签: php firebase server firebase-authentication firebase-security

我正在创建一个自定义用户管理系统,涉及所有要在应用程序服务器上存储的应用程序数据,但是电话应该由firebase进行身份验证。当新用户在系统上注册时,将执行Firebase电话身份验证。从Firebase成功进行身份验证后,注册数据会通过API转到服务器。现在的问题是,如何检查服务器端电话号码是否已通过Firebase认证?如果我允许在没有服务器端Firebase身份验证的情况下进行注册,则有人可能会欺骗API请求。我目前正在使用var selectedOptions = $("#select").val(); console.log(selectedOptions); function onSelectChange(){ var selectedOptions = $("#select").val(); console.log(selectedOptions); } var setValue = ["apples","mango"]; function setOptions(){ $("#select option").prop("selected", false); for(var i=0;i<setValue.length;i++){ $("#select option[value='" + setValue[i] + "']").prop("selected", true); } } Firebase SDK for PHP。 我现在使用的流程在下面Currunt Flow of Registration中进行了展示,我想要实现的流程也可以给出为: Proposed Solution to Secure the Registration flow.

2 个答案:

答案 0 :(得分:1)

当用户首次成功使用其电话号码进行身份验证时,该电话号码将存储在Firebase Auth User列表中的用户记录中,并且可以视为已验证。

一旦电话号码与您的Auth数据库中的用户相关联,您就可以确定

  • 电话号码有效
  • 电话号码已成功用于对该用户进行身份验证的时间点
  • 该电话号码无法与其他用户关联

不应假定此电话号码现在已“验证”。如Firebase官方文档页面所述:

  

安全问题

     

仅使用电话号码进行身份验证虽然方便,但操作却较少   比其他可用方法更安全,因为拥有电话   号码可以在用户之间轻松转移。另外,在具有   多个用户个人资料,任何可以接收SMS消息的用户都可以   使用设备的电话号码登录帐户。

     

如果您在应用中使用基于电话号码的登录功能,则应提供该功能   以及更安全的登录方法,并告知用户   使用电话号码登录进行安全性权衡。

     

来源:https://firebase.google.com/docs/auth/web/phone-auth#security-concerns

PS:向用户添加电话号码的唯一其他方法是通过Admin SDK,在这里,您有责任确保电话号码属于用户。

PSS:据我了解(并检查),Firebase REST API不会公开“已验证的电话号码”信息。

答案 1 :(得分:1)

Firebase Rest API具有method for that

在设备上,在对用户进行身份验证并拥有User对象之后,要获取用于验证的令牌,可以调用

然后,使用该临时ID令牌,可以将a POST request发送到https://identitytoolkit.googleapis.com/v1/accounts:lookup?key=[API_KEY]API_KEY是Firebase项目的“ Web API密钥”)以获取用户信息,将包含令牌所有者的phoneNumber

因此,您可以在服务器端验证令牌的所有者具有该特定的电话号码。