在发送OTP SMS消息之前需要完成证明请求,以防止OTP服务的欺诈和滥用。以前,当对应用程序使用OTP时,它将使用SafetyNet来完成证明请求。作为SafetyNet无法成功完成的情况下的后备,将使用reCaptcha代替SafetyNet。 最近,SafetyNet was announced for deprecation和Play Integrity API将取代它的位置。 Play Integrity API为开发人员组合了多个完整性判定,以证明设备和应用程序是可信的。在利用OTP流进行认证的情况下,完整性判定是设备完整性和应用完整性。这两个判决都需要成功,以便将成功的OTP SMS消息发送给用户。为了运行设备完整性,它在设备上运行一些东西以确认该设备是真正的设备。为了返回成功的应用程序裁决,应用程序需要具有与Google Play中列出的相匹配的SHA-1和SHA-256证书指纹。
如果您在Firebase Console中设置Google Play签名指纹后仍然看到reCaptcha消息,那么我将使用Peter's Asset Link tool来确认本地部署的应用版本(在您的手机上)具有匹配的指纹:
如果指纹都匹配,但您收到一条错误消息:
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.
1条答案
按热度按时间vhmi4jdf1#
为什么我在进行电话身份验证时会看到reCaptcha?
在发送OTP SMS消息之前需要完成证明请求,以防止OTP服务的欺诈和滥用。以前,当对应用程序使用OTP时,它将使用SafetyNet来完成证明请求。作为SafetyNet无法成功完成的情况下的后备,将使用reCaptcha代替SafetyNet。
最近,SafetyNet was announced for deprecation和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 Console中设置Google Play签名指纹后仍然看到reCaptcha消息,那么我将使用Peter's Asset Link tool来确认本地部署的应用版本(在您的手机上)具有匹配的指纹:
如果指纹都匹配,但您收到一条错误消息:
这可能是由于Google Play签名、调试密钥或上传密钥中缺少SHA-1或SHA-256证书指纹。
获取reCaptcha认证,但没有短信
如果您收到了reCaptcha,但在按照上述步骤注册所有证书指纹后没有收到短信,那么您可能要做的最后一项努力是验证您的Firebase Android密钥上没有应用程序限制。以下是首选应用程序限制的示例:
Android应用在回退到reCaptcha时将重用在
google-services.json
文件中找到的API密钥。由于您正在回退到reCaptcha,因此用户设备上使用的浏览器将具有与您的应用程序不同的证书指纹,因此将发送该证书指纹而不是您的应用程序。因此,由于它回退并发送不同的证书指纹,可能不在图中的allowlist中,因此它将失败reCaptcha并显示错误消息,就像前面在这个答案中看到的那样。警告
如果您目前正在使用此API密钥进行Firebase(其他付费Google服务)之外的操作,则可能会遇到API密钥被滥用的情况。请考虑创建单独的API密钥,如本文档所述。这一点在这里的文档中也有明确的说明。
AppCheck需要什么版本?
AppCheck和Phone身份验证是两个独立的产品。是的,电话身份验证确实使用Play Integrity来完成其证明请求,但它将Play Integrity嵌入其包中,并且AppCheck是启用电话身份验证的不必要步骤。话虽如此,添加AppCheck始终是提高应用程序安全性的好主意,因为它将为特定Firebase端点的客户端请求提供证明。
注意一点
还有关于Firebase电话身份验证和播放完整性的recently an outage,但自发布此消息以来已得到解决。