You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Nginx仅接受特定React Native应用的请求?

限制Node.js后端仅接受React Native(Expo)应用请求的方案

1. 结合应用签名验证与请求加密校验

单纯靠自定义请求头确实容易被伪造,推荐把Expo应用的唯一标识(签名/包名)和请求加密结合起来,提升安全性:

  • 在Expo项目里用expo-application库获取应用的唯一标识:
    import * as Application from 'expo-application';
    import { Platform } from 'react-native';
    
    const getAppAuthInfo = async () => {
      if (Platform.OS === 'android') {
        // 获取Android应用签名哈希
        return await Application.getAndroidSignatureHashes();
      } else if (Platform.OS === 'ios') {
        // 返回iOS包名
        return Application.iosBundleIdentifier;
      }
      return null;
    };
    
  • 发起请求时,带上三个自定义头:
    • X-App-Auth-Info: 上面获取的应用标识
    • X-Request-Timestamp: 当前时间戳(毫秒)
    • X-Signature: 用后端预先约定的密钥,对时间戳+应用标识做HMAC-SHA256加密后的字符串
  • 后端处理逻辑:
    1. 先校验时间戳是否在5分钟内,防止重放攻击
    2. 用相同密钥对请求里的时间戳+X-App-Auth-Info做加密,和X-Signature对比,不匹配直接拒绝
    3. 校验X-App-Auth-Info是否是你应用的合法标识

2. 客户端凭证式的OAuth2.0验证

把你的RN应用当作一个OAuth客户端,通过短期凭证来授权:

  • 后端生成一对客户端ID和密钥(只在你的应用和后端之间留存)
  • Expo应用启动后,调用后端的/auth/client-token接口,用客户端ID和密钥换取有效期1小时左右的access token
  • 后续所有请求都在请求头里带上Authorization: Bearer <token>
  • 后端验证token的签名、有效期,合法才允许访问
  • 注意:客户端密钥别硬编码在前端,用Expo的app.config.js结合环境变量注入,避免反编译泄露:
    // app.config.js
    export default {
      expo: {
        extra: {
          clientId: process.env.CLIENT_ID,
          clientSecret: process.env.CLIENT_SECRET
        }
      }
    };
    

3. 限流措施解决频繁请求问题

不管是不是合法应用请求,都要限制请求频率,防止恶意刷接口:

  • 如果用Express框架,直接用express-rate-limit中间件:
    const rateLimit = require('express-rate-limit');
    
    const apiLimiter = rateLimit({
      windowMs: 15 * 60 * 1000, // 15分钟窗口
      max: 100, // 单IP最多100次请求
      message: '请求过于频繁,请稍后再试'
    });
    
    // 给所有接口应用限流
    app.use('/api/', apiLimiter);
    
  • 针对已登录用户,可以基于用户ID限流,比IP更精准。

4. 健康检查路由的特殊处理

健康检查路由不用做严格的应用身份校验,但也要加上限流,避免被用来发起DDoS攻击。

内容的提问来源于stack exchange,提问作者Mike K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:21:16