http通信鉴权(三)基于 Session + CSRF Token 的 Cookie 认证

一、介绍

1、简介

这也是一个非常典型的 Web 会话认证方式,不是 OAuth,也不是 JWT,而是: 基于 Session + CSRF Token 的 Cookie 认证(Spring / Java 系生态最常见)

项目 是否
Session-based Auth
Cookie Auth
CSRF Protection
JWT
OAuth2

2、示例

XSRF-TOKEN=******; SESSION=******

二、组成

XSRF-TOKEN = e1a29ed4-8850-4e48-8ac5-833ccfad1899

SESSION = ljU0ZDa2OTMtMTg2gS00njE2LTk0MDEtOGUyMuYxNTE3MTZa

1、SESSION(核心认证凭证)

这是服务端 Session ID,登录成功后由服务器生成。

  • 存在:内存 / Redis / DB

  • Cookie 里只存 sessionId

  • 每次请求:Cookie: SESSION=xxxx

  • 服务端用 sessionId 找用户信息,这就是真正的"你是谁"

2、XSRF-TOKEN(防 CSRF)

这是 CSRF 防护 token(不是身份认证),

  • 用来防止:跨站请求伪造(CSRF)

  • 常见于:Spring Security Angular / Vue

工作机制
  1. 服务端生成一个随机 token

  2. 放到 Cookie(XSRF-TOKEN

  3. 前端每次 非 GET 请求时:

    从 Cookie 读,然后放到 Header:X-XSRF-TOKEN: e1a29ed4-8850-4e45-8ac5-833ccfad1896

  4. 服务端校验 Header 和 Cookie 是否一致

📌 它不代表登录态,只是"你是本站页面发的请求"

**三、**结合Playwright

复制代码
// 登录后
BrowserContext context = browser.newContext();
// Cookie 会自动带
复制代码
String xsrf = context.cookies().stream()
    .filter(c -> "XSRF-TOKEN".equals(c.name))
    .findFirst()
    .map(c -> c.value)
    .orElse(null);

2、API 请求时带 Header

复制代码
page.request().post("/api/xxx",
  RequestOptions.create()
    .setHeader("X-XSRF-TOKEN", xsrf)
);

3、复用登录态(自动化测试常用)

推荐做法:storageState

复制代码
context.storageState(
  new BrowserContext.StorageStateOptions()
    .setPath(Paths.get("state.json"))
);

下次:

复制代码
browser.newContext(
  new Browser.NewContextOptions()
    .setStorageStatePath(Paths.get("state.json"))
);
相关推荐
牛马工作号15 小时前
Wi‑Fi 完全指南:从 802.11 协议到 Wi‑Fi 7、AC+AP 与 Mesh 工程组网
网络·网络协议·智能路由器
Geek-Chow16 小时前
ALB SSL policy conflict (AWS Load Balancer Controller)
网络协议·ssl·aws
爱刷碗的苏泓舒16 小时前
FTP、FTPS 与 WinSCP:原理、连接机制及 GNSS 工程应用
网络协议·ftp·winscp·数据下载·ftps
雲帝16 小时前
Windows虚拟机UDP大包分片排障
windows·网络协议·udp
ControlRookie16 小时前
第04篇_把 HTTP 放进 PLC:扫描周期、缓冲区、状态机和能力边界
http·codesys·plc通信
八代臻17 小时前
蒲公英免费异地组网
网络协议
記億揺晃着的那天18 小时前
HTTPS 页面内网直连 NAS:解决 Mixed Content 与公网带宽瓶颈
网络协议·http·https·nas
想学好C++的oMen20 小时前
socket编程TCP
linux·网络·网络协议·tcp/ip
GitLqr1 天前
别再盲目复制了:彻底搞懂 CORS 的本质与那些“神坑”
安全·http·面试
IPdodo_2 天前
Codex 一直显示 Thinking 怎么办?区分任务运行、界面卡住与会话恢复
http·网络调试