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 参数
相关推荐
点光12 小时前
使用Sentinel作为Spring Boot应用限流组件
后端
不要秃头啊13 小时前
别再谈提效了:AI 时代的开发范式本质变了
前端·后端·程序员
有志13 小时前
Java 项目添加慢 SQL 查询工具实践
后端
山佳的山14 小时前
KingbaseES 共享锁(SHARE)与排他锁(EXCLUSIVE)详解及测试复现
后端
Leo89914 小时前
rust 从零单排 之 一战到底
后端
程序员清风15 小时前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
鱼人15 小时前
MySQL 实战入门:从“增删改查”到“高效查询”的核心指南
后端
大鹏198815 小时前
告别 Session:Spring Boot 实现 JWT 无状态登录认证全攻略
后端
Java编程爱好者15 小时前
从 AQS 到 ReentrantLock:搞懂同步队列与条件队列,这一篇就够了
后端
鱼人15 小时前
Nginx 全能指南:从反向代理到负载均衡,一篇打通任督二脉
后端