FireBase Recaptcha 验证失败 - SITE_MISMATCH
FireBase Recaptcha verification failed - SITE_MISMATCH
我正在使用 googleapi 的 firebase 身份工具包在网络上进行 phone 验证。
我也使用站点密钥处理了网站的 recaptcha,然后去做 post 请求,但我无法向手机发送短信,因为过去 2 天我一直在同样的问题上陷入困境。
以下是我执行的步骤
- 从 firebase 控制台启用 phone 身份验证机制。
- 为同一个 firebase 项目启用 web api 密钥。
- 转到 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"
。
解决方案是:
转到您的项目(例如,Identity 内容应该 运行 的项目)并访问 Identity Platform 控制台,如下所示:
复制散列
向https://identitytoolkit.googleapis.com/v1/recaptchaParams?key=[THE_HASH_YOU_HAVE_COPIED_ABOVE]
发送获取请求
您将收到一本包含 3 key-value 对的字典
里面有一个 recaptchaSiteKey
,这是您需要在网页上用作站点密钥的那个,您将从中调用 MFA 工作流步骤
感谢为解开谜团而努力的我的同事们!
我正在使用 googleapi 的 firebase 身份工具包在网络上进行 phone 验证。 我也使用站点密钥处理了网站的 recaptcha,然后去做 post 请求,但我无法向手机发送短信,因为过去 2 天我一直在同样的问题上陷入困境。 以下是我执行的步骤
- 从 firebase 控制台启用 phone 身份验证机制。
- 为同一个 firebase 项目启用 web api 密钥。
- 转到 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"
。
解决方案是:
转到您的项目(例如,Identity 内容应该 运行 的项目)并访问 Identity Platform 控制台,如下所示:
复制散列
向
发送获取请求https://identitytoolkit.googleapis.com/v1/recaptchaParams?key=[THE_HASH_YOU_HAVE_COPIED_ABOVE]
您将收到一本包含 3 key-value 对的字典
里面有一个
recaptchaSiteKey
,这是您需要在网页上用作站点密钥的那个,您将从中调用 MFA 工作流步骤
感谢为解开谜团而努力的我的同事们!