精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

再見 localStorage :2025 年用 Cookie 托管 JWT 的 SPA 實戰

開發 前端
我們解析 JSON、讀取 Cookie,并讓?csurf?在瀏覽器里種下一枚?CSRF Cookie。此后所有不安全方法(POST/PUT/DELETE…)都必須回傳那枚 Token,否則請求會被拒。

當你忽然發現:項目里把令牌丟進 localStorage,其實這些年一直暴露在 XSS 風險下,那表情……你懂的。

把同一枚令牌放進 HttpOnly Cookie,立刻有三件好事發生:

  • JS 讀不到 —— 注入腳本再也偷不走你的身份;
  • 瀏覽器自動帶 —— 每個請求都自帶 Cookie,無需你手寫 Authorization 頭;
  • 安全標記可用 —— Secure / SameSite 等旗標能有效降低 CSRF 與竊聽風險。

一句話:多一點點配置,安心很多年

服務器端:在 Node.js 里簽發 & 刷新令牌

極簡 Express 骨架

// server/index.mjs
import express from 'express';
import cookieParser from 'cookie-parser';
import csurf from 'csurf';

const app = express();
app.use(express.json());
app.use(cookieParser());

// 將 CSRF Token 放在 Cookie 中(雙重提交策略)
app.use(csurf({ cookie: true }));

// 提供一個拿 CSRF Token 的小接口(從 header 里讀)
app.get('/api/csrf-token', (req, res) => {
  res.setHeader('x-csrf-token', req.csrfToken());
  res.sendStatus(204);
});


我們解析 JSON、讀取 Cookie,并讓 csurf 在瀏覽器里種下一枚 CSRF Cookie。此后所有不安全方法(POST/PUT/DELETE…)都必須回傳那枚 Token,否則請求會被拒。

“登錄”接口:發出一對 Access/Refresh

import jwt from 'jsonwebtoken';

const isProd = process.env.NODE_ENV === 'production';

app.post('/api/token', (req, res) => {
  const { username, password } = req.body;

  // 1) 校驗賬號口令(略)

  const accessToken  = jwt.sign({ sub: username }, process.env.ACCESS_SECRET,  { expiresIn: '5m' });
  const refreshToken = jwt.sign({ sub: username }, process.env.REFRESH_SECRET, { expiresIn: '1d' });

  res
    .cookie('access_token',  accessToken,  {
      httpOnly: true, sameSite: 'strict', secure: isProd, maxAge: 5 * 60 * 1000
    })
    .cookie('refresh_token', refreshToken, {
      httpOnly: true, sameSite: 'strict', secure: isProd, maxAge: 24 * 60 * 60 * 1000
    })
    .json({ user: username, status: 'active' });
});


密碼驗證通過后,我們生成兩枚令牌。它們都寫進 HttpOnly Cookie:腳本拿不到,但瀏覽器會在每次請求時自動附帶。

“刷新”接口:用 refresh 換一對新票

app.post('/api/token/refresh', (req, res) => {
  const refreshToken = req.cookies.refresh_token;
  if (!refreshToken) return res.sendStatus(401);

  jwt.verify(refreshToken, process.env.REFRESH_SECRET, (err, decoded) => {
    if (err) return res.sendStatus(403);

    const newAccess  = jwt.sign({ sub: decoded.sub }, process.env.ACCESS_SECRET,  { expiresIn: '5m' });
    const newRefresh = jwt.sign({ sub: decoded.sub }, process.env.REFRESH_SECRET, { expiresIn: '1d' });

    res
      .cookie('access_token',  newAccess,  {
        httpOnly: true, sameSite: 'strict', secure: isProd, maxAge: 5 * 60 * 1000
      })
      .cookie('refresh_token', newRefresh, {
        httpOnly: true, sameSite: 'strict', secure: isProd, maxAge: 24 * 60 * 60 * 1000
      })
      .json({ ok: true });
  });
});


從 Cookie 里取出 refresh_token 校驗;合法就“續簽”一對新票塞回 Cookie;不合法就要求重新登錄。

React 端:與 Cookie & CSRF 一起生活

先拿到 CSRF Token

async function getCSRF() {
  const res = await fetch('/api/csrf-token', { credentials: 'include' });
  return res.headers.get('x-csrf-token');
}

中間件已經種下了 CSRF Cookie。我們調用一個極小的接口,就能從 響應頭里拿到同值的 Token,隨后用于 POST/PUT/DELETE 等請求的頭部。

登錄

const loginUser = async (e) => {
  e.preventDefault();
  const csrf = await getCSRF();

  const res = await fetch('/api/token', {
    method: 'POST',
    credentials: 'include', // 雙向攜帶 Cookie
    headers: {
      'Content-Type': 'application/json',
      'X-CSRF-Token': csrf
    },
    body: JSON.stringify({
      username: e.target.username.value,
      password: e.target.password.value
    })
  });

  if (res.ok) {
    const data = await res.json();
    // 公開信息放本地存儲沒問題;敏感票據一律別放
    localStorage.setItem('username', data.user);
  } else {
    alert('Wrong login or password');
  }
};

靜默續期(Auto-Refresh)

useEffect(() => {
  const t = setInterval(async () => {
    const csrf = await getCSRF();
    await fetch('/api/token/refresh', {
      method: 'POST',
      credentials: 'include',
      headers: { 'Content-Type': 'application/json', 'X-CSRF-Token': csrf }
    });
  }, 4.5 * 60 * 1000); // 比 5 分鐘過期稍早一點
  return () => clearInterval(t);
}, []);


每 4.5 分鐘悄悄續一把簽。用戶一路流暢,無“會話過期請重新登錄”的打擾。

五個加分場景

1)大文件上傳

const uploadFile = async (file) => {
  const data = new FormData();
  data.append('file', file);

  await fetch('/api/upload', {
    method: 'POST',
    body: data,
    credentials: 'include'
  });
};


Cookie 自動攜帶,函數無需關心 Token/頭部,邏輯更干凈。

2)Next.js 的服務端渲染(SSR)

export async function getServerSideProps({ req }) {
  const token = req.cookies.access_token;
  // 代表用戶預取私有數據……
  return { props: { /* … */ } };
}


SSR 階段令牌在 req.cookies,你可以提前取數,把“成品 HTML”送到瀏覽器。

3)WebSocket 實時聊天


瀏覽器升級為 WS 時,許多環境不會自動附帶 Cookie。通常做法:把 Access Token 掛在查詢串上,一次性校驗。

wss://site/chat?token=abc.def.ghi

后端握手時校驗通過即放行,之后保持長連。

4)微服務前的 API Gateway

網關讀取 Cookie,把令牌轉抄進 Authorization 頭后轉發請求。內部服務無需理解瀏覽器細節,只需照常驗簽。

5)移動端(React Native)

移動端沒有 HttpOnly Cookie。把 Refresh Token 存在系統提供的 Keychain/Keystore 里是次優解: 它會加密,并隔離其他 App 訪問。

要點回顧(Takeaways)

  • HttpOnly Cookie 能把你的 JWT 隔絕于 XSS 之外;
  • CSRF Token 仍然必須:所有“非冪等”請求都要帶;
  • 定期刷新讓會話持續而不打擾用戶;
  • 從 Django → Node.js 的遷移,主要是服務端配線;瀏覽器側邏輯幾乎不變


責任編輯:武曉燕 來源: 大遷世界
相關推薦

2025-06-19 09:42:22

2025-04-02 00:42:39

2022-06-22 07:52:03

cookieoptionsmerge

2025-01-06 13:04:21

2025-08-11 02:00:00

JWTSession系統

2021-08-09 08:53:30

HTTP狀態化協議

2021-03-23 10:45:23

CookieSession前端

2024-04-26 12:45:39

JWTCookieSession

2025-03-31 08:31:15

2025-05-16 07:10:00

CMOROI營銷領導

2021-01-28 18:06:49

JavaScriptCookieWeb

2021-03-10 09:39:08

Vue插件SEO

2014-07-14 11:47:03

火狐瀏覽器

2020-10-29 10:44:59

斗魚騰訊虎牙

2021-01-21 07:16:03

RocketMQKafka中間件

2024-09-09 07:37:51

AspJWT權限

2025-03-06 11:07:27

2022-07-25 14:54:32

前端

2024-11-08 08:32:48

2012-03-29 09:50:56

云計算SaaS源碼
點贊
收藏

51CTO技術棧公眾號

无码人妻精品一区二区三区不卡| 亚洲高清无码久久| 日本三级在线视频| 精品亚洲欧美一区| 欧美精品xxx| 亚洲人成人无码网www国产| 天堂久久一区| 精品福利视频导航| 中文精品视频一区二区在线观看| 国产wwwxxx| 性欧美xxxx大乳国产app| 日韩亚洲在线观看| 制服丝袜第一页在线观看| 福利一区和二区| 亚洲第一搞黄网站| 一区二区免费电影| 天堂a√在线| 国产精品2024| 国产精品成av人在线视午夜片| 欧美三级小视频| 极品美女一区二区三区| 精品国产第一区二区三区观看体验| 日韩精品无码一区二区三区免费 | 亚洲欧洲日韩国产| 五月六月丁香婷婷| 日韩一区二区三区免费视频| 亚洲成人av电影在线| 亚洲成av人片观看| 伊人影院在线视频| 国产亚洲一卡2卡3卡4卡新区| 黑人巨大精品欧美一区免费视频| 狠狠久久伊人| 中文字幕视频精品一区二区三区| 婷婷丁香激情综合| 日本久久久久久久久久久| 日本视频一区二区| 色综合天天综合在线视频| 国产精品jizz在线观看老狼| 久久一区欧美| 99国产在线播放| 99a精品视频在线观看| 色婷婷av一区二区三区之一色屋| 黄网站色视频免费观看| 视频免费一区| 久久久久国产精品麻豆ai换脸| 99国产精品| 日本v片在线免费观看| 精品一区在线| 亚洲精品v天堂中文字幕| 亚洲激情在线看| 91在线成人| 在线视频国内自拍亚洲视频| 欧美一区二区精品在线| 黄色欧美在线| 久久精品亚洲一区二区三区浴池| 91久久国产自产拍夜夜嗨| 中文字幕乱码视频| 三级久久三级久久久| 欧美又大粗又爽又黄大片视频| 老司机av网站| 日本伊人精品一区二区三区介绍| 欧美一级视频在线观看| 中国黄色a级片| 国产精品无码在线播放| 一起草最新网址| 高清毛片在线看| 久久毛片高清国产| 欧美日韩国产免费一区二区三区| 天天躁日日躁狠狠躁喷水| jlzzjlzz亚洲日本少妇| 国内精品视频在线播放| 亚洲图片欧洲图片日韩av| 国产精品视频久| 欧美特级黄色录像| 欧美午夜精品一区二区三区电影| 亚洲美女av在线播放| 久久久久久亚洲中文字幕无码| 韩日一区二区三区| 最近2019年日本中文免费字幕| 中文字幕亚洲欧美| 久久精品亚洲麻豆av一区二区| 精品国产人成亚洲区| 国产裸体视频网站| 999久久精品| 亚洲精品福利在线观看| 日韩精品无码一区二区三区久久久| 日韩理论电影中文字幕| 国产区精品在线| 国产无遮挡又黄又爽又色视频| 国产亚洲第一伦理第一区| 国产亚洲欧洲黄色| 波多野结衣喷潮| 久久久9色精品国产一区二区三区| 久久av中文字幕| 国产精品igao激情视频 | 亚洲澳门在线| 国模私拍视频一区| 中文字幕+乱码+中文乱码www| 国内久久婷婷综合| 国产欧美一区二区三区另类精品| 久久久久国产精品嫩草影院| 国产精品久久三区| 欧美一级片免费播放| 日韩高清不卡| 欧美精品一区二区久久久| 国产jk精品白丝av在线观看 | 人妻无码久久一区二区三区免费| 成人影院入口| 欧美一区二区精品久久911| 人妻无码一区二区三区| 围产精品久久久久久久| 欧美性受xxx| 99久久久无码国产精品免费| 91小视频在线观看| 国产精品8888| 国产a亚洲精品| 亚洲精品美女在线观看| 日韩欧美123区| 久久久久国产精品一区二区| 4444kk亚洲人成电影在线| www 日韩| 日韩欧美在线观看| 极品白嫩少妇无套内谢| 欧美独立站高清久久| 88xx成人精品| 亚洲精品网站在线| 亚洲女厕所小便bbb| 日韩一级片播放| 欧美黄色录像| 欧美激情精品在线| 国内精品久久久久久久久久| 国产精品美女久久久久久久久 | 国产乱码一区二区三区| 色播亚洲婷婷| 美女日韩欧美| 亚洲精品久久久一区二区三区| 91在线播放观看| 蜜臀av一级做a爰片久久| 欧美精品与人动性物交免费看| 2020日本在线视频中文字幕| 5858s免费视频成人| 波多野结衣家庭教师在线观看 | 91福利国产成人精品播放| 日韩影视在线观看| 久久久久久亚洲精品不卡| 国产成年妇视频| 亚洲欧美视频在线观看视频| 欧美午夜aaaaaa免费视频| 久久91麻豆精品一区| 欧美在线性视频| 天堂中文在线资源| 天天综合日日夜夜精品| 国产高清成人久久| 国产午夜久久| 免费精品视频一区二区三区| 成人小电影网站| 亚洲欧美综合图区| 成人免费视频国产免费| 国产女人aaa级久久久级| 国产一级特黄a大片免费| 精品视频网站| 国产日韩中文字幕在线| 超碰最新在线| 欧美r级在线观看| 日韩欧美三级在线观看| 91免费在线视频观看| 免费在线激情视频| 精品国内自产拍在线观看视频 | 国产精品无码免费播放| 亚洲精品视频一区| 911亚洲精选| 亚洲一区观看| 日韩.欧美.亚洲| 国产电影一区| 97精品视频在线| 欧美精品a∨在线观看不卡| 在线免费一区三区| 欧美激情精品久久久久久免费| 国产成人av一区二区三区在线观看| 91午夜在线观看| 免费视频亚洲| 91欧美精品午夜性色福利在线 | 国产精品爽黄69| 国产一区久久精品| 精品乱人伦小说| 欧美一区二区三区网站| 国产精品久久毛片a| 日本精品一二三| 蜜桃av一区| 伊人久久大香线蕉成人综合网| 18国产精品| 日韩av片免费在线观看| 激情在线小视频| 日韩精品中文字| 一级黄色录像大片| 亚洲成国产人片在线观看| 男人的天堂av网| 国产成人av资源| 国产又粗又长又大的视频| 欧美精品一卡| 欧美重口乱码一区二区| 人人九九精品视频| 国产精品高清在线观看| 蜜臀av在线| 国产小视频91| 噜噜噜久久,亚洲精品国产品| 在线观看亚洲精品视频| 精品少妇theporn| 最新高清无码专区| 精品人妻一区二区三区香蕉| 国产成人午夜视频| 天天碰免费视频| 亚洲青涩在线| 日韩精品手机在线观看| 精品色999| 蜜桃传媒视频第一区入口在线看| 国产美女视频一区二区| 国产成人精品免高潮在线观看| 国产羞羞视频在线播放| 久久精品国产96久久久香蕉| 黄色在线观看网| 亚洲精品98久久久久久中文字幕| 国产美女免费看| 欧美午夜电影在线播放| 中文字幕第四页| 亚洲国产成人va在线观看天堂| 久久精品日韩无码| 国产亚洲欧美在线| 在线 丝袜 欧美 日韩 制服| 成人精品一区二区三区四区 | 成人精品亚洲人成在线| 国产探花在线观看视频| 蜜桃视频一区二区三区在线观看| av动漫免费看| 国产视频欧美| 国产中文字幕在线免费观看| 国产中文一区| 91免费国产精品| 欧美区亚洲区| 色婷婷777777仙踪林| 99视频精品全国免费| 亚洲欧美日韩在线综合| 日韩成人免费| 水蜜桃亚洲精品| 第四色成人网| 亚洲丰满在线| 欧美xxav| 最新av网址在线观看| 亚洲国产精品日韩专区av有中文| 国产人妻互换一区二区| 偷偷www综合久久久久久久| 在线观看亚洲视频啊啊啊啊| 成人精品视频| 自拍偷拍亚洲色图欧美| 婷婷激情图片久久| 小说区视频区图片区| 久久精品国产www456c0m| 亚洲午夜精品一区二区三区| 四季av一区二区三区免费观看| 亚洲资源视频| 伊人久久大香线蕉综合四虎小说 | 国产精品扒开腿做爽爽| 久久久久国产精品麻豆| 国产无遮挡在线观看| 综合久久综合久久| 欧美精品一区二区蜜桃| 一区二区成人在线观看| 日韩人妻无码一区二区三区99| 午夜精品aaa| 亚洲婷婷综合网| 欧美影院精品一区| 国产巨乳在线观看| 日韩欧美电影一二三| 黑人乱码一区二区三区av| 日韩成人av在线| 国产精品久久久久一区二区国产 | 成人性视频免费看| 中文字幕中文在线不卡住| 久久久久久久久毛片| 亚洲成人黄色影院| 中文区中文字幕免费看| 欧美久久久久久久久久| 欧美一级一区二区三区| 亚洲色图色老头| a在线免费观看| 久久人人97超碰精品888| 亚洲涩涩在线| 91精品免费看| 欧美重口另类| 一区二区三区四区欧美| 欧美日韩精选| 免费观看成人在线视频| 精品一区二区三区日韩| 亚洲女则毛耸耸bbw| 国产欧美日本一区视频| 免费毛片在线播放免费| 一本大道综合伊人精品热热 | 亚洲黄色一区二区三区| 欧美1区2区3区| 成人小视频在线看| 国产成人av影院| 国产一区二区三区四区在线| 亚洲图片欧美色图| 一区二区三区免费在线视频| 亚洲乱码一区av黑人高潮| 国产原创在线观看| 国产精品www| 老司机精品视频在线播放| 亚洲 欧洲 日韩| 久久久一二三| 亚洲成a人无码| 国产精品福利一区二区| 国产高清中文字幕| 亚洲成人激情视频| 精品美女在线观看视频在线观看 | 日韩中文字幕视频| 玛雅亚洲电影| 国产日韩欧美一区二区| 亚洲久久久久| 粉色视频免费看| 久久久精品国产99久久精品芒果| 欧美成人黄色网| 欧美日韩一区二区三区不卡| 日本精品999| 欧美大片在线看| 高清精品久久| 樱花www成人免费视频| 久久久999| 少妇按摩一区二区三区| 性做久久久久久免费观看欧美| 精品国产九九九| 精品国产美女在线| 国产成人久久精品麻豆二区| 日韩av电影免费在线| 亚洲少妇自拍| 波多野结衣视频播放| 一区二区三区日韩欧美精品| 国产一区二区三区成人| 这里只有精品丝袜| 韩国成人在线| 欧美高清一区二区| 久久中文欧美| 免费在线观看污| 色婷婷精品大在线视频| 中国xxxx性xxxx产国| 毛片网站在线免费观看| 国产精品伦理一区二区| 亚洲国产精一区二区三区性色| 欧美高清精品3d| 蜜桃视频网站在线观看| 国产在线视频欧美| 成人在线一区| 亚洲性图一区二区| 日本一区二区视频在线观看| 亚洲大尺度在线观看| 亚洲欧美中文日韩在线| 亚欧洲精品视频| 欧美日韩视频专区在线播放| 在线观看h片| 成人黄色大片在线免费观看| 婷婷久久综合| 久久久久无码精品| 一区二区三区四区激情| 性中国古装videossex| 欧美精品久久久久| 欧美色资源站| 99福利在线观看| 国产精品天天摸av网| 一级特黄aaa大片在线观看| 两个人的视频www国产精品| 日韩成人久久| 91动漫在线看| 久久视频一区二区| 亚洲免费视频二区| 不卡av在线网站| 国产福利资源一区| 天天碰免费视频| 亚洲欧美日本韩国| 视频三区在线观看| 国产精品极品美女在线观看免费| 97精品国产一区二区三区| 欧美人与性动交α欧美精品 | 久久免费公开视频| 亚洲国产精品久久| 网友自拍亚洲| 在线观看福利一区| thepron国产精品| 中文字幕一区二区人妻痴汉电车 | 欧美三级网色| 九色porny丨国产精品| 精国产品一区二区三区a片| 亚洲精品一区在线观看| 欧美亚洲大片| 天天操天天干天天玩| 99视频热这里只有精品免费| 天干夜夜爽爽日日日日| 欧美老少做受xxxx高潮| 精品产国自在拍| 亚洲美女在线播放| 欧美日韩极品在线观看一区|