FireBase Recaptcha 验证失败 - SITE_MISMATCH

FireBase Recaptcha verification failed - SITE_MISMATCH

我正在使用 googleapi 的 firebase 身份工具包在网络上进行 phone 验证。 我也使用站点密钥处理了网站的 recaptcha,然后去做 post 请求,但我无法向手机发送短信,因为过去 2 天我一直在同样的问题上陷入困境。 以下是我执行的步骤

  1. 从 firebase 控制台启用 phone 身份验证机制。
  2. 为同一个 firebase 项目启用 web api 密钥。
  3. 转到 firebase recapcha admin 并启用我的主机网站以获取 repactha 令牌。

最后,我使用来自 firebase 控制台的 api 密钥和来自前端的验证码令牌以及我服务器端的 phone 号码进行了 post 请求。 但是我得到的 json 响应如下。

 {'error': {'code': 400, 
'message': 'CAPTCHA_CHECK_FAILED : Recaptcha verification failed - SITE_MISMATCH', 'errors': [{'message': 'CAPTCHA_CHECK_FAILED : Recaptcha verification failed - SITE_MISMATCH', 'domain': 
'global', 'reason': 'invalid'}]}}

这是我弄脏的一些代码。

def _factory(self):
    firebase_api_key = settings.FIREBASE_API_KEY

    params = (
        ('key', firebase_api_key),
    )

    json_data = {
        'phoneNumber': self._data['phone_number'],
        'recaptchaToken': self._data['recaptchaToken'],
    }

    secret_key = 'MY_SERVER_SIDE_RECAPTCHA_SITE_KEY'
    headers = {"Content-Type": "application/x-www-form-urlencoded"}
    data = {
        'secret': secret_key,
        'response': self._data['recaptchaToken']
    }

    url = 'https://www.google.com/recaptcha/api/siteverify'

    captacha_verify = requests.post(url, headers=headers, params=data)
    print(captacha_verify.json())
    headers = {
        'content-type': 'application/json',
    }

    new = requests.post('https://identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode',params=params,json=json_data,headers = headers)

    print(new.json())

任何帮助反馈都会非常有用。我没有使用 firebase 数据库。我只想最大限度地减少通过 phone 号码验证用户的短信成本。

我相信您需要使用 getRecaptchaParam() 方法来生成 site-key。

结果将是包含密钥的 json。如果我没记错的话,你可以将其传递给请求。

{
  "recaptchaSiteKey": string
}

如果你需要在后端,你可以使用这个https://identitytoolkit.googleapis.com/v1/recaptchaParams?key=api_key

长话短说 - 在常规 recaptcha 模式中的工作方式之间似乎存在非常令人困惑的区别(即将 recaptcha 元素放在网站上 >>> 获取 recaptcha 令牌 >>> 在 Google API 并获得它的分数 >>> 决定在服务器端如何处理它)和第二种情况,其中一个人被迫使用 recaptcha 以便 MFA 在 Google 身份中工作平台。

虽然 reCAPTCHA enterprise documentation seems quite exhaustive the one related to Google Identity 省略了很多细节 - 因此出现了上述问题。

因此,如果为了使 MFA 在 Google Identity 中工作而想要集成 reCaptcha,如果他们从 GCP 控制台中的相关位置创建站点密钥:

密钥根本不起作用,他们将收到错误消息 "CAPTCHA_CHECK_FAILED : Recaptcha verification failed - SITE_MISMATCH"

解决方案是:

  1. 转到您的项目(例如,Identity 内容应该 运行 的项目)并访问 Identity Platform 控制台,如下所示:

  2. 复制散列

  3. https://identitytoolkit.googleapis.com/v1/recaptchaParams?key=[THE_HASH_YOU_HAVE_COPIED_ABOVE]

    发送获取请求
  4. 您将收到一本包含 3 key-value 对的字典

  5. 里面有一个 recaptchaSiteKey,这是您需要在网页上用作站点密钥的那个,您将从中调用 MFA 工作流步骤

感谢为解开谜团而努力的我的同事们!