Android 使用Firebase推送通知令牌进行身份验证-正确还是错误?

Android 使用Firebase推送通知令牌进行身份验证-正确还是错误?,android,ios,security,authentication,backend,Android,Ios,Security,Authentication,Backend,我实习的公司目前正在使用Firebase推送通知令牌从移动应用程序到后端进行身份验证,我不确定这是否是一种好的做法。其工作方式如下: FirebaseInstanceID服务为每个设备发出一个唯一的令牌 一旦设备启动 移动用户向服务器发送登录信息;如果服务器进行身份验证,则 然后,移动应用程序将Firebase令牌上传到数据库,并将其删除 与用户一起存储,以便令牌与用户匹配 在任何后续登录时,用户将从FirebaseInstanceID服务检索到的Firebase令牌发送到服务器;服务器尝试将

我实习的公司目前正在使用Firebase推送通知令牌从移动应用程序到后端进行身份验证,我不确定这是否是一种好的做法。其工作方式如下:

  • FirebaseInstanceID服务为每个设备发出一个唯一的令牌 一旦设备启动

  • 移动用户向服务器发送登录信息;如果服务器进行身份验证,则 然后,移动应用程序将Firebase令牌上传到数据库,并将其删除 与用户一起存储,以便令牌与用户匹配

  • 在任何后续登录时,用户将从FirebaseInstanceID服务检索到的Firebase令牌发送到服务器;服务器尝试将令牌与用户匹配

    • 单击注销后,移动电话将向服务器发送一个空令牌(即空字符串)及其相关用户名

我觉得这是一种非常糟糕的身份验证方法,但我不知道为什么。根据我的研究,传统的方法是服务器向客户机发送一个临时会话ID,客户机安全地存储它,然后将它发送到服务器以备后续请求。有人能解释一下Firebase业务的现状以及为什么它是好的还是坏的吗?

据我所知,贵公司面临的问题是使用后端API对设备进行身份验证。 实际上,对于移动应用程序来说,这是一个棘手的问题。如果用户不必亲自进行身份验证,您仍然不想向任何人开放您的服务。因此,您希望有一个自动身份验证系统,在您的移动应用程序的后台运行,并识别设备或应用程序实例

要做到这一点,您需要做两件事:1-以独特的方式识别设备(或应用程序实例)。2-确保用于标识设备/应用程序实例的字符串来自真实的设备/应用程序实例

Firebase实例ID可能是目前最好的免费方式。移动应用程序要求谷歌服务生成唯一的令牌。然后,移动应用程序将令牌发送到后端API进行身份验证。 然后,后端API通过向google services发出请求,确保在身份验证期间,发送的令牌来自真实的应用程序实例。谷歌服务确保令牌是在真实设备(android/ios)上生成的,并引用应用程序的实例(而不是被篡改的实例)

这是一种很好的方式,可以将我在上面提到的安全问题委托给谷歌服务(如果你不是安全专家,谷歌服务可能比你更好)

当然,您还应该采取其他安全措施来确保后端API的完整性。比如HTTPS

因此,我想当涉及到移动开发时,我们应该希望有一个更好的解决方案,但由于没有更好的解决方案,使用firebase实例id并不是一个坏做法


希望这有助于解决贵公司面临的问题,据我所知,它需要使用后端API对设备进行身份验证。 实际上,对于移动应用程序来说,这是一个棘手的问题。如果用户不必亲自进行身份验证,您仍然不想向任何人开放您的服务。因此,您希望有一个自动身份验证系统,在您的移动应用程序的后台运行,并识别设备或应用程序实例

要做到这一点,您需要做两件事:1-以独特的方式识别设备(或应用程序实例)。2-确保用于标识设备/应用程序实例的字符串来自真实的设备/应用程序实例

Firebase实例ID可能是目前最好的免费方式。移动应用程序要求谷歌服务生成唯一的令牌。然后,移动应用程序将令牌发送到后端API进行身份验证。 然后,后端API通过向google services发出请求,确保在身份验证期间,发送的令牌来自真实的应用程序实例。谷歌服务确保令牌是在真实设备(android/ios)上生成的,并引用应用程序的实例(而不是被篡改的实例)

这是一种很好的方式,可以将我在上面提到的安全问题委托给谷歌服务(如果你不是安全专家,谷歌服务可能比你更好)

当然,您还应该采取其他安全措施来确保后端API的完整性。比如HTTPS

因此,我想当涉及到移动开发时,我们应该希望有一个更好的解决方案,但由于没有更好的解决方案,使用firebase实例id并不是一个坏做法

希望这有帮助