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 参数
相关推荐
大佐不会说日语~2 小时前
若依框架 (Spring Boot 3) 集成 knife4j 实现 OpenAPI 文档增强
spring boot·后端·python
Java微观世界2 小时前
枚举不止是常量!Java枚举的高级用法与单例最佳实践
后端
hhh小张2 小时前
HttpServlet(4):Cookie🍪与Session💻
后端
lecepin2 小时前
AI Coding 资讯 2025-09-25
前端·javascript·后端
舒一笑3 小时前
PandaCoder 1.1.8 发布:中文开发者的智能编码助手全面升级
java·后端·intellij idea
少妇的美梦3 小时前
Spring Boot搭建MCP-SERVER,实现Cherry StudioMCP调用
后端·mcp
SimonKing3 小时前
跨域,总在发OPTIONS请求?这次终于搞懂CORS预检了
java·后端·程序员
这里有鱼汤3 小时前
如何用Python找到股票的支撑位和压力位?——均线簇
后端·python
考虑考虑3 小时前
dubbo3超时时间延长
java·后端·dubbo