iframe 的 src 链接里带了参数(比如 token 或签名),想在 Nginx 层做鉴权

这类需求常见于:父页面给子 iframe 一个「临时授权链接」,Nginx 校验合法性后才允许访问。


1. 基础思路

  1. 前端 iframe 带参数

    html 复制代码
    <iframe src="https://example.com/app?token=abc123"></iframe>
  2. Nginx 拦截请求,读取 URL 参数(token

  3. 校验 token 是否合法:

    • 简单场景:和预设值比对
    • 复杂场景:交给后端鉴权服务检查
  4. 如果合法 → 继续代理目标内容 如果非法 → 返回 403/重定向到错误页


2. Nginx 配置示例

简单校验固定 token

nginx 复制代码
server {
    listen 80;
    server_name example.com;

    location /app {
        # 提取 token 参数
        if ($arg_token != "abc123") {
            return 403;   # token 不对,禁止访问
        }

        root /var/www/html;  # 或者 proxy_pass 到后端
        index index.html;
    }
}

这里 $arg_token 表示 URL 里的 ?token=xxx 参数。


使用子请求交给后端鉴权

如果 token 是动态的,需要和数据库/Redis 校验,可以让 Nginx 请求一个鉴权接口:

nginx 复制代码
server {
    listen 80;
    server_name example.com;

    location /app {
        auth_request /auth;   # 鉴权子请求
        proxy_pass http://backend/app;  # 通过鉴权才继续访问
    }

    # 鉴权子请求
    location = /auth {
        internal;
        proxy_pass http://auth-service/check?token=$arg_token;

        # 如果 auth-service 返回 2xx → 允许
        # 如果返回 401/403 → 拦截
    }
}

这里用到了 auth_request 模块,Nginx 会先访问 /auth,拿返回码作为是否放行的依据。


3. 更安全的做法

直接把 token 放 URL 参数有几个风险:

  • 会出现在浏览器历史、日志、Referer
  • 有被泄露的可能

👉 更安全的方式:

  • 短期有效的签名 URL(类似阿里云 OSS / AWS S3 的 presigned URL)
  • 或者在前端设置 Cookie,再让 Nginx 校验 Cookie

总结

  • $arg_token 可以直接在 Nginx 层校验参数
  • 更复杂的逻辑用 auth_request 转发到后端校验
  • 如果安全要求高,建议用 短期签名 URLCookie 代替 query 参数
相关推荐
凌览18 分钟前
2026年1月编程语言排行榜|C#拿下年度语言,Python稳居第一
前端·后端·程序员
码事漫谈20 分钟前
【深度解析】为什么C++有了malloc,还需要new?
后端
晴虹27 分钟前
lecen:一个更好的开源可视化系统搭建项目--组件和功能按钮的权限控制--全低代码|所见即所得|利用可视化设计器构建你的应用系统-做一
前端·后端·低代码
Java编程爱好者29 分钟前
Java 并发编程:JUC 包中原子操作类的原理和用法
后端
爱分享的鱼鱼29 分钟前
Pinia 深度解析:现代Vue应用状态管理最佳实践
前端·后端
JOEH6031 分钟前
🚀 别再用 Future.get() 傻等了!CompletableFuture 异步编排实战,性能提升 300%!
后端·程序员
神奇小汤圆34 分钟前
原来可以搭建一个HTTP服务
后端
Hooray1135 分钟前
前后端分离_案例学习_Python+Flask+VUE3
后端·python·学习·flask
计算机毕设VX:Fegn089536 分钟前
计算机毕业设计|基于springboot + vue在线音乐播放系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
计算机毕设VX:Fegn089540 分钟前
计算机毕业设计|基于springboot + vue博物馆展览与服务一体化系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计