Spring Boot如何验证请求来自指定Android应用
验证Android应用请求的可行方案
完全可行,但不存在绝对能阻止所有伪造请求的方案,只能通过多种手段组合大幅提高伪造门槛,以下是几种无需在APK中嵌入敏感密钥的有效方法:
Android应用签名校验
服务端预先存储自己发布的Android应用的签名哈希值(比如SHA-256),要求客户端在每次请求时将自身应用的签名哈希作为请求头(如X-App-Signature)发送。Spring Boot端通过拦截器提取该值,与预存的合法哈希对比,不匹配则直接拒绝请求。
实现细节:Android端可通过PackageManager获取自身签名的哈希值,这个过程无需嵌入密钥;虽然签名哈希可被逆向获取,但伪造者要模拟这个请求,必须重新打包应用并绕过系统的签名校验,普通curl调用无法轻易做到。动态环境特征校验
检查请求的环境特征,筛选非Android应用发起的请求:- 校验请求头中的
User-Agent,合法Android应用的请求通常带有系统版本、应用包名或网络库标识(如OkHttp的OkHttp/4.9.3); - 要求客户端附加仅真实Android环境能生成的临时信息(比如系统Build的部分动态字段),服务端对这些信息做合理性校验,避免固定值被伪造。
- 校验请求头中的
请求行为模式校验
通过分析合法应用的请求行为逻辑拦截异常请求:- 校验请求时序:合法应用的API调用通常有固定顺序(比如先登录再拉取数据),服务端记录会话的请求序列,不符合则拦截;
- 限制请求频率:对单个IP或会话设置请求频率阈值,curl等批量调用容易触发限制;
- 校验参数关联性:部分参数需基于前一个请求的返回值生成,伪造请求很难模拟这种关联逻辑。
绑定用户身份验证
将应用请求验证与用户身份绑定,要求用户先完成手机号/验证码等登录流程,服务端生成会话令牌(如JWT),后续所有请求必须携带该令牌。这种方式虽不能直接拦截伪造的应用请求,但能确保只有合法用户的请求被处理,大幅降低伪造请求的实际价值。
内容的提问来源于stack exchange,提问作者Heejae Kim
相关产品推荐
相关产品推荐

