代码之家  ›  专栏  ›  技术社区  ›  lord stock

FireBase重新捕获验证失败-SITE_MISMATCH

  •  0
  • lord stock  · 技术社区  · 4 年前

    我正在使用谷歌api中的firebase身份工具包进行网络电话验证。 我也使用网站密钥处理了网站的回复,并去做了帖子请求,但我无法向手机发送短信,因为我在过去的两天里一直在处理同样的问题。 以下是我所做的步骤

    1. 从firebase控制台启用电话身份验证机制。
    2. 为相同的firebase项目启用web api密钥。
    3. 转到firebase repactha管理员并启用我的主机网站以获得repactha令牌。

    最后,我使用firebase控制台的api密钥和前端的captcha令牌以及服务器端的电话号码发布了请求。 但是我得到的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数据库。我只是想尽量减少短信通过电话号码验证用户的成本。

    0 回复  |  直到 4 年前
        1
  •  2
  •   Nizar    4 年前

    我认为你需要使用 getRecaptchaParam() 方法,以便生成站点密钥。

    结果将是 json 包含密钥。如果我没有弄错的话,你可以把它传给请求。

    {
      "recaptchaSiteKey": string
    }
    
        2
  •  2
  •   Kiril    4 年前

    长话短说-在常规的重述模式(即,将重述元素放在网站上>>获取重述令牌>>在Google API上验证它并获得它的分数>&lgt;决定在服务器端使用它做什么)和第二种情况(即,为了MFA而被迫使用重述)之间似乎存在非常令人困惑的差异Google Identity平台。

    reCAPTCHA enterprise documentation 似乎相当详尽 Google Identity 省略了很多细节,因此出现了上述问题。

    因此,如果有人想集成reCaptcha以使MFA在Google Identity中工作,如果他们从GCP控制台的相关位置创建网站密钥: enter image description here

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

    这个 解决方案 是为了:

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

    2. 复制哈希

    3. 向发送获取请求 https://identitytoolkit.googleapis.com/v1/recaptchaParams?key=[THE_HASH_YOU_HAVE_COPIED_ABOVE]

    4. 您将收到一本包含3个键值对的词典

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

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