Flutter如何通过代理发起HTTP请求调用reCAPTCHA验证接口
Flutter端通过代理调用reCAPTCHA接口改造方案
核心改造原则
绝对不要在Flutter客户端直接存储reCAPTCHA的secretKey、也不要让客户端直接请求Google官方接口:
- secretKey属于服务端敏感凭证,打包在客户端内会被反编译窃取,造成验证码逻辑被绕过
- 直接请求Google接口被拦截的问题,本质需要通过你已经配置好的服务端代理做转发,不需要在客户端做网络层代理配置
具体改造点
- 将原代码里的Google官方接口地址,替换为你自己服务器暴露的reCAPTCHA校验代理接口地址
- 删除客户端请求里无效的
Access-Control-Allow-Origin头:这个头是服务端返回响应时携带的跨域配置,客户端主动添加没有任何作用 - 客户端请求体只传前端拿到的验证码token即可,secretKey由服务端代理层存储维护,不要在客户端代码里出现
改造后代码示例
final response = await http.post( // 此处替换为你自有服务端的代理接口地址,例如 https://你的业务域名/api/recaptcha/verify Config.verificationURL, headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, // 仅传递前端获取到的用户验证码token,secret参数由服务端拼接后请求Google接口 body: 'response=$_token', );
服务端代理配套逻辑
你的服务端代理接口收到Flutter传来的response参数后,在服务端侧拼接自身存储的secretKey,向https://www.google.com/recaptcha/api/siteverify发起form格式的POST请求,拿到Google返回的校验结果后,把结果处理后返回给Flutter端即可,全程客户端不需要和Google接口产生直接通信,自然不会出现被拦截的问题。
注意:不要尝试在Flutter客户端内置HTTP代理指向、内置代理账号密码或secretKey,这类客户端侧的配置都可以被抓包、反编译破解,安全性没有任何保障。
内容的提问来源于stack exchange,提问作者ali
相关产品推荐
相关产品推荐

