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

如何在客户端安全存储API Token,防止用户查看访问?

针对Django+React项目的API Token安全存储方案

首先明确核心原则:API Token绝对不能存放在前端可访问的位置(meta标签、sessionStorage、localStorage都不行),这些地方用户通过页面审查或JS控制台就能轻易获取,对于处理敏感客户信息的项目来说风险极高,XSS攻击会直接窃取Token导致数据泄露。

结合你的技术栈,推荐两个最靠谱的方案:

方案一:使用Django原生会话认证(HttpOnly Cookie)—— 优先选择

这是最贴合Django生态、安全性最高的方案,完全不需要前端持有API Token:

  • 后端配置(settings.py):
    确保开启以下配置,让会话Cookie具备安全属性:
    SESSION_COOKIE_HTTPONLY = True  # 禁止JS读取Cookie,防范XSS攻击
    SESSION_COOKIE_SECURE = True     # 仅在HTTPS协议下传输Cookie
    SESSION_COOKIE_SAMESITE = 'Lax'  # 防止CSRF攻击,也可根据需求设为'Strict'
    
  • 后端逻辑:用户登录后,Django自动创建会话并设置上述安全Cookie,无需手动生成独立API Token。所有业务API视图用@login_required装饰器保护,后端通过会话自动验证用户身份。
  • 前端React调整:
    发起请求时,让浏览器自动带上会话Cookie。如果用axios,可全局配置:
    import axios from 'axios';
    axios.defaults.withCredentials = true;
    
    你之前获取CSRF Token的代码可以保留,请求时把CSRF Token放在X-CSRFToken请求头里,和原有逻辑一致即可。

这种方式下,认证信息存储在HttpOnly Cookie中,前端JS无法读取,用户也看不到,彻底避免Token泄露风险。

方案二:后端代理API请求(若必须使用独立API Token)

如果你的数据接口是第三方服务,必须用独立Token调用,那把Token完全留在后端,前端通过Django代理请求:

  • 后端Django编写代理视图:
    import requests
    from django.http import JsonResponse
    from django.contrib.auth.decorators import login_required
    
    @login_required
    def proxy_api(request):
        # 从后端配置或服务器端会话中取出API Token(绝对不要传给前端)
        api_token = request.session.get('api_token')
        # 调用目标API,在后端内部带上Token
        response = requests.get(
            'https://目标API地址',
            headers={'Authorization': f'Bearer {api_token}'}
        )
        # 将第三方API的结果返回给前端
        return JsonResponse(response.json(), status=response.status_code)
    
  • 前端React只和自己的Django后端通信,不用知道API Token的存在,请求路径改为代理视图的URL即可。

这种方式下Token完全隔离在后端,前端没有任何机会接触到,安全性拉满。


内容的提问来源于stack exchange,提问作者Miguel G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:31:58