【问题标题】:INVALID_ARGUMENT when sending V3 reCAPTCHA token for assessment发送 V3 reCAPTCHA 令牌进行评估时 INVALID_ARGUMENT
【发布时间】:2023-01-27 04:19:01
【问题描述】:

我们在发送 reCAPTCHA 令牌进行评估时遇到错误。

令牌是在客户端使用RecaptchaEnterprise.xcframework并且应该从我们的后端发送到谷歌。

这是实例化客户端的代码:

    private func activateReCAPTCHA() {
    _Concurrency.Task {
        if #available(iOS 14.0, *) {
            let (recaptchaClient, error) = await Recaptcha.getClient(Resources.recaptchaKey)
            if let error {
                print("RecaptchaClient creation error: \(String(describing: error.errorMessage)).")
                error.reportToExternalServices()
            } else if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
                appDelegate.recaptchaClient = recaptchaClient
                print("RecaptchaClient created.")
            } else {
                print("RecaptchaClient creation error: AppDelegate not available.")
            }
            sleep(0)
        }
    }
}

这是请求和接收令牌的代码:

extension RecaptchaClient {
    static var client: RecaptchaClient? {
        if #available(iOS 14.0, *) {
            return (UIApplication.shared.delegate as? AppDelegate)?.recaptchaClient
        } else {
            return nil
        }
    }
}

private func fetchReCAPTCHAToken() {
    guard let recaptchaClient = RecaptchaClient.client else {
        print("fetchReCAPTCHAToken: RecaptchaClient not found")
        return
    }
    
    if #available(iOS 14.0, *) {
        Task {
            let (token, error) = await recaptchaClient.execute(RecaptchaAction(action: .login))
            if let token = token {
                print("fetchReCAPTCHAToken: \(token.recaptchaToken)")
            } else {
                print("fetchReCAPTCHAToken: \(String(describing: error?.errorMessage))")
            }
            sleep(0)
        }
    }
}

到目前为止一切都很好。 为了模拟后端,我创建了一个 cURL 脚本,它发送以下 json,以及从 xCode 控制台粘贴生成的令牌:

  {
      "event": {
          "token": "...",
          "siteKey": "...",
          "expectedAction": "login"
      }
  }

方法为POST,URL结构如下:

https://recaptchaenterprise.googleapis.com/v1/projects/.../assessments?key=..

响应:

{

  "error": {
      "code": 400,

      "message": "Request contains an invalid argument.",

      "status": "INVALID_ARGUMENT"
  }
}

我们对 Postman 做了同样的事情,得到了同样的结果。 这可能是什么原因?

【问题讨论】:

    标签: ios swift recaptcha-v3 recaptcha-enterprise


    【解决方案1】:

    我会仔细检查您的siteKey 论点。请注意,这应该是您的 reCAPTCHA Enterprise site key,而不是 GCP API key。如果您从 reCAPTCHA v2 或 v3 迁移到 reCAPTCHA Enterprise,它也不是您的“私钥”。

    请注意,请求中的 ?key= 查询参数是 API key,但如果这不正确,它将表现为身份验证错误,而不是无效参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多