Maf*_*aza 2 browser android one-time-password firebase flutter
使用 Flutter 和 Firebase 请求 OTP 时,为什么会在 Android 中打开 Web 浏览器?它与 Play Integrity API 有什么关系?当应用程序在 Google Play 商店上发布时,网络浏览器是否会停止显示?如果是,为什么?
发送 OTP SMS 消息之前需要完成证明请求,以防止欺诈和滥用 OTP 服务。以前,当应用程序使用 OTP 时,它将使用 SafetyNet 来完成证明请求。作为 SafetyNet 无法成功完成的情况下的后备方案,将使用 reCaptcha 代替 SafetyNet。
最近,SafetyNet 被宣布弃用,Play Integrity API 将取而代之。
Play Integrity API 结合了多个完整性判定,供开发人员证明设备和应用程序是可信的。在使用 OTP 流进行身份验证的情况下,完整性判定是设备完整性和应用程序完整性。这两个判决都需要成功,才能将 OTP SMS 消息成功发送给用户。为了运行设备完整性,它会在设备上运行某些内容以确认该设备是正品设备。为了返回成功的应用程序判决,应用程序需要具有与 Google Play 中列出的匹配的 SHA-1 和 SHA-256 证书指纹。
如果您未部署到 Google Play,使用不同的密钥从不同的应用程序商店获取应用程序,或者使用应用程序的调试版本,则设备判定可能会成功,但应用程序判定可能会失败。这将导致应用程序回退到 reCaptcha 证明而不是 Google Play。
为了在 Firebase 控制台中注册正确的证书指纹,您可以检查是否使用 Google Play 签名(大多数应用都使用)并从 Google Play 获取这些指纹:

然后,将这些指纹与 Firebase 控制台中注册的指纹进行匹配:

如果您在 Firebase 控制台中设置 Google Play 签名指纹后仍然看到 reCaptcha 消息,那么我将使用Peter 的 Asset Link 工具来确认应用程序的本地部署版本(在您的手机上)具有匹配的指纹:
如果指纹全部匹配,但您收到一条错误消息:
This request is missing a valid app identifier, meaning that Play Integrity checks, SafetyNet checks, and reCAPTCHA checks were unsuccessful. Please try again or check the logcat for more details.
Run Code Online (Sandbox Code Playgroud)
这可能是由于 Google Play 签名、调试密钥或上传密钥缺少 SHA-1 或 SHA-256 证书指纹。
如果您收到 reCaptcha,但在按照上述步骤注册所有证书指纹后没有收到短信,那么您可能需要做的最后一项工作是验证您的 Firebase Android 密钥上没有应用程序限制。以下是首选应用程序限制的示例:
Android 应用程序在回退到 reCaptcha 时将重用在google-services.json文件中找到的 API 密钥。由于您要回退到 reCaptcha,因此用户设备上使用的浏览器将具有与您的应用程序不同的证书指纹,因此将发送该证书指纹而不是您的应用程序。因此,由于它回退并发送不同的证书指纹(可能不在图中的允许列表中),因此它会失败 reCaptcha,并显示一条错误消息,如本答案中之前看到的那样。
如果您目前正在将此 API 密钥用于 Firebase(其他付费 Google 服务)之外的用途,则可能会遇到 API 密钥被滥用的情况。请考虑按照本文档中的概述创建单独的 API 密钥。此处的文档中也特别指出了这一点。
AppCheck 和电话身份验证是两个独立的产品。是的,电话身份验证确实使用 Play Integrity 来完成其证明请求,但它在其包中嵌入了 Play Integrity,而 AppCheck 是启用电话身份验证的不必要步骤。话虽如此,添加 AppCheck 始终是提高应用程序安全性的好主意,因为它将为您对特定 Firebase 端点的客户端请求提供证明。
最近还出现了有关 Firebase Phone Auth 和 Play Integrity 的中断,但自发布此消息以来该问题已得到解决。
| 归档时间: |
|
| 查看次数: |
1351 次 |
| 最近记录: |