Next.js 16 · 请求边界实验

认证边界模拟器

把一次请求推过两道防线:Proxy 只做快速、乐观的登录提示检查;真正的会话、租户关系与资源权限,必须在 Route Handler、Server Action 或 DAL 里重新验证。

配置这次请求

改变任一条件,管线会同步重算;“运行请求”用于重播状态变化。

请求信封

客户端 Header 不作身份证明。 即使请求自己写了租户 ID,也要删除或忽略;租户上下文来自已登记 Host / 路由,归属结论来自已验证会话与数据库 membership。

请求轨迹:乐观入口 → 权威下游 下游入口永远自证
  1. 等待

    Proxy 乐观检查

  2. 等待

    下游重新验证会话

  3. 等待

    租户关系

  4. 等待

    资源权限

  5. 等待

    放行 / 拒绝

拒绝
等待配置

直接请求

可以绕过按钮、客户端校验与 Layout;若 matcher 命中,Proxy 仍只是第一道筛选,服务端入口继续权威授权。

matcher 漏掉

只代表 Proxy 没运行,不代表自动放行。Route Handler、Server Action 与 DAL 仍按会话 → 租户 → 资源逐层检查。

证据账本

安全判断不是“看见一个字段”,而是验证这个字段从哪里来、能证明到哪一层。

不可信输入

  • 原始 Cookie、客户端 x-tenant-id
  • 按钮是否显示、Layout 是否渲染
  • matcher 是否命中、入口 URL 长什么样

快速路由证据

  • 已验签且未过期的 Session Hint
  • 已登记 Host 映射出的路由租户
  • 只够改善跳转 / rewrite 体验,不授予 Atlas 权限

权威授权证据

  • 数据源确认的有效会话与用户
  • userId + tenantId membership
  • 目标资源上的读 / 写权限

可复制伪代码 · 入口共同调用一把锁

Proxy:只验签 Hint、做登录跳转或租户 rewrite,不查询 Atlas 项目权限。

下游:页面、Route Handler、Server Action 与直接请求都调用同一权威 guard。

Layout:可以隐藏导航或表单,但不能保护接口,也不能替代入口授权。