Firebase 手机身份验证 - 应用验证(SafetyNet)
Posted
技术标签:
【中文标题】Firebase 手机身份验证 - 应用验证(SafetyNet)【英文标题】:Firebase phone authentication - app verification(SafetyNet) 【发布时间】:2021-04-11 00:24:27 【问题描述】:我想通过 SafetyNet 验证电话号码 Firebase 而不是 reCAPTCHA 验证。我在这里关注 Firebase 文档:https://firebase.google.com/docs/auth/android/phone-auth
在 Google API 控制台中,我启用了 Android 设备验证 API。 在 Firebase 控制台中,我添加了 SHA-256 指纹。 重新安装 google-service.json 并将其添加到项目中。它总是将我重定向到网页以验证我不是机器人。我尝试删除
implementation 'androidx.browser:browser:1.3.0'
但是应用崩溃了。
这是我用于 SafetyNet 的代码,它总是成功但随后显示网页。我想知道如何防止应用程序始终重定向到 reCAPTCHA 验证,尽管 attest 功能工作正常。
private fun checkSafetyNet()
if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context)
== ConnectionResult.SUCCESS
)
val nonce =
(getString(R.string.app_name) + Random.nextInt(100) + getString(R.string.otp_verification)).toByteArray()
SafetyNet.getClient(this.requireActivity())
.attest(nonce, API_KEY)
.addOnSuccessListener
// Indicates communication with the service was successful
setFirebasePhoneVerificationCallbacks()
startPhoneNumberVerification()
.addOnFailureListener e ->
// An error occurred while communicating with the service.
if (e is ApiException)
// An error with the Google Play services API contains some
// additional details.
val apiException = e as ApiException
Log.i("SAFETYERROR", apiException.message.toString())
// You can retrieve the status code using the
// apiException.statusCode property.
else
// A different, unknown type of error occurred.
Log.d("SafetyNetError", "Error: " + e.message)
else
// Prompt user to update Google Play services.
【问题讨论】:
【参考方案1】:根据 firebase,只会触发 reCAPTCHA 流程:
当 SafetyNet 不可用时。
如果用户没有 Google Play 服务支持或当您在模拟器上测试您的应用时。
您的设备未通过可疑检查。
如果您的设备已植根或设备引导加载程序处于解锁状态,那么由于第三种情况,应用 reCAPTCHA 验证将可见。
检查您的应用日志中是否有“SafetyNet”标签,并确认您的设备引导加载程序是锁定还是解锁。
在解锁引导加载程序的情况下,safetyNet 将给出 LOCK_BOOTLOADER 的建议,如屏幕截图中所述。日志示例:
“SafetyNetAttestationVerifier E 没有通过任何 SafetyNet AttestationResponse。”
“SafetyNetAttestationVerifier E 无法解析 SafetyNet AttestationResponse”
“SafetyNetAttestationVerifier E SafetyNet Attestation 基本完整性失败。”
“SafetyNetAttestationVerifier E SafetyNet Attestation 有建议:XXXXXXXX”
【讨论】:
是否需要先锁定设备的引导加载程序? 是的,它需要处于锁定状态,否则每次 reCAPTCHA 都会显示给用户,并且 firebase 项目 url 将以 OTP 短信形式出现。以上是关于Firebase 手机身份验证 - 应用验证(SafetyNet)的主要内容,如果未能解决你的问题,请参考以下文章