跳转至

架构说明

整体架构

Website Defender 设计为配合 Nginxauth_request 模块使用。它作为一个独立的认证服务,在 Nginx 转发请求到您的实际应用之前验证用户身份。

graph LR
    User[用户/浏览器] --> Nginx
    Nginx -->|1. 检查权限| Defender[Website Defender]
    Defender -->|2. 允许/拒绝| Nginx
    Nginx -->|3. 转发请求| App[内部应用]

工作流程:

  1. 用户发起请求到 Nginx
  2. Nginx 通过 auth_request 指令向 Website Defender 发起子请求
  3. Defender 执行完整的认证和安全检查,返回允许或拒绝
  4. 如果认证通过,Nginx 将原始请求转发到内部应用;否则返回拒绝响应

关于 auth_request

auth_request 是 Nginx 的一个标准模块,允许 Nginx 在处理请求之前,先向外部认证服务发起子请求。Defender 利用此机制实现透明的认证代理,无需修改内部应用代码。


中间件链

请求到达 Defender 后,按以下顺序依次通过中间件处理:

graph LR
    A[安全响应头] --> B[CORS]
    B --> C[请求体限制]
    C --> D[访问日志]
    D --> E[地域封锁]
    E --> F[WAF]
    F --> G[速率限制]
    G --> H[路由处理]
顺序 中间件 说明
1 安全响应头 自动附加安全头(X-Content-Type-Options、X-XSS-Protection 等)
2 CORS 跨域资源共享策略
3 请求体限制 限制请求体大小(默认 10MB)
4 访问日志 记录所有请求信息(IP、方法、路径、状态码等)
5 地域封锁 基于 GeoIP 按国家/地区封锁请求
6 WAF Web 应用防火墙,检测 SQL 注入、XSS、路径穿越等攻击
7 速率限制 全局限速与登录限速
8 路由处理 执行具体的业务逻辑

认证流程

当请求到达 /auth 端点时,Defender 按以下顺序执行认证检查:

graph TD
    A[收到请求] --> B{IP 黑名单?}
    B -->|命中| C[拒绝 403]
    B -->|未命中| D{IP 白名单?}
    D -->|命中| E[允许通过]
    D -->|未命中| F{JWT 令牌?}
    F -->|有效| G{作用域检查}
    G -->|通过| E
    G -->|不匹配| C
    F -->|无效/缺失| H{Git Token?}
    H -->|有效| I{作用域检查}
    I -->|通过| E
    I -->|不匹配| C
    H -->|无效/缺失| J{许可证令牌?}
    J -->|有效| E
    J -->|无效/缺失| C

认证验证流程(简化表示):

IP 黑名单 → IP 白名单 → JWT 令牌(+ 作用域检查) → Git Token(+ 作用域检查) → 许可证令牌 → 拒绝

认证优先级

  • IP 黑名单优先级最高,命中即拒绝
  • IP 白名单命中后直接放行,跳过后续所有认证
  • 多种令牌认证按顺序尝试,任一通过即放行
  • 管理员用户始终跳过域名作用域检查

相关页面