精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

好吊成人免视频| 亚洲黄色成人| 欧美精品xxxxbbbb| 无码人妻精品一区二区三区99v| 国产一区二区三区成人| 18成人免费观看视频| 亚洲片av在线| 九色|91porny| 欧美人体做爰大胆视频| 无码人妻aⅴ一区二区三区日本| 亚洲女同志亚洲女同女播放| 欧美一级片中文字幕| 久久人人爽人人| www一区二区www免费| av在线资源站| 福利电影一区二区| 亚洲国产精品久久久久婷婷884| 日韩一区欧美小说| 懂色中文一区二区三区在线视频| 国产成人无码精品| 国产精品99一区二区三区| 日韩精品久久久久久福利| 一道本在线免费视频| av资源一区| 自拍偷拍亚洲激情| 三区精品视频观看| 狠狠躁夜夜躁av无码中文幕| 九九视频精品免费| 国产精品白嫩美女在线观看| 久久久久久久蜜桃| 国产精品久久久久久麻豆一区软件| 日韩电影大全免费观看2023年上 | 激情自拍一区| 久久久精品国产亚洲| 妺妺窝人体色WWW精品| 久久精品福利| 精品国产伦一区二区三区观看方式 | 亚洲aⅴ男人的天堂在线观看| 天堂免费在线视频| 免播放器亚洲| 91成人在线播放| 久久久99精品| 欧美精选一区| 久久99热这里只有精品国产| 51精品免费网站| 99久久www免费| 日韩在线高清视频| 国产又粗又猛又爽又黄的视频四季 | 女教师淫辱の教室蜜臀av软件| 97在线免费视频| 亚洲综合国产| 午夜视频在线观看一区| 久久久av网站| 乱老熟女一区二区三区| 不卡一区2区| 中文字幕日韩av综合精品| 国产高清精品在线观看| 五月天婷婷丁香| 国模一区二区三区| 久久97久久97精品免视看| 欧美一区二区三区爽爽爽| 在线观看免费一区二区| 不卡毛片在线看| 欧美日韩免费一区二区| 国产精品a久久久久| 久久久久在线观看| 中文字幕亚洲高清| 麻豆成人在线| 国产精品揄拍500视频| 96日本xxxxxⅹxxx17| 国精产品一区一区三区mba桃花 | 1级黄色大片儿| 亚洲神马久久| 国产精品免费久久久久影院| 国产精品一二三四五区| a黄色在线观看| 久久av最新网址| 国产精品久久久久久婷婷天堂| 波多野结衣在线电影| 久久av老司机精品网站导航| 99久久久精品免费观看国产| 日本人妻丰满熟妇久久久久久| 91麻豆福利精品推荐| 性刺激综合网| 国产天堂在线播放视频| 日韩欧美国产视频| gogogo高清免费观看在线视频| 精品视频在线观看网站| 日韩av在线网| 精品伦精品一区二区三区视频密桃| 亚洲精品小说| 欧美一级视频在线观看| 一级黄色大片免费| 成人免费av资源| 天堂av一区二区| 综合久久2o19| 欧美性xxxxxxxx| 欧美图片自拍偷拍| 凹凸成人精品亚洲精品密奴| 欧美日韩国产91| 日韩不卡高清视频| 成人激情文学综合网| 亚洲不卡一卡2卡三卡4卡5卡精品| aaa在线免费观看| 午夜视频在线观看一区二区三区| 色婷婷综合网站| 久久电影在线| 久久av在线看| 色老头一区二区| 大白屁股一区二区视频| 亚洲一区二区三区午夜| 日本蜜桃在线观看视频| 欧美一区二区三区免费观看视频| 蜜桃传媒一区二区亚洲| 日韩视频一区二区三区在线播放免费观看| 亚洲国产aⅴ天堂久久| 欧美精品人人做人人爱视频| 91小视频xxxx网站在线| 国产一区啦啦啦在线观看| 欧美性色欧美a在线播放| 97人人模人人爽人人澡| 大片网站久久| 欧美在线免费观看| 日本波多野结衣在线| 亚洲欧美日韩国产一区二区三区| 国产熟人av一二三区| 乱亲女h秽乱长久久久| 欧美第一黄网免费网站| 99国产精品欲| 亚洲天堂免费在线观看视频| 欧美一级特黄a| 国产精品一线天粉嫩av| 97视频在线观看免费| 丰满熟妇人妻中文字幕| 亚洲女与黑人做爰| 午夜精品免费看| 日韩午夜电影网| 国产精品视频一区二区三区四| 欧美欧美欧美| 色婷婷综合在线| 亚洲乱码国产乱码精品精大量 | 国产精品无码人妻一区二区在线| 国产亚洲高清一区| 久久国产精品99国产精| 国产免费一区二区三区最新不卡| 国产精品人人做人人爽人人添| 日本熟妇人妻中出| 精品国产日韩欧美| 国产精品大陆在线观看| 国产在线电影| 欧美系列亚洲系列| 97精品在线播放| 精品一二三四在线| 99久久久无码国产精品性色戒| 香蕉久久一区| 欧美精品免费播放| 亚洲国产精品suv| 婷婷丁香激情综合| 人人妻人人澡人人爽人人精品| 久久激情久久| 色就是色欧美| 粉嫩av国产一区二区三区| 欧美乱大交xxxxx| 日本高清视频www| 一本色道久久综合精品竹菊| 九一在线免费观看| 韩日欧美一区二区三区| 国产乱子伦精品无码专区| 久久久久观看| 国产精品久久91| 国产精品久久麻豆| 亚洲第一精品夜夜躁人人爽 | 欧美精品九九99久久| 欧美日韩一级大片| 91最新地址在线播放| 国产无套粉嫩白浆内谢的出处| 第九色区aⅴ天堂久久香| 91夜夜未满十八勿入爽爽影院 | 国产精品福利在线观看网址| 欧美a在线看| 亚洲国产婷婷香蕉久久久久久| 欧美h在线观看| 综合电影一区二区三区 | 国产精品久久久久7777按摩| 中文国产在线观看| 国产精品日韩精品欧美精品| 亚洲国产欧美日韩| 国产精品对白| 国产精品普通话| 超碰在线97国产| 91精品国产91久久综合| 青青草久久爱| 成人欧美一区二区三区在线播放| 免费一区二区三区在线观看| 综合久久成人| 欧美日韩专区在线| 国产一级做a爱免费视频| 国产亚洲一本大道中文在线| 成人性生交视频免费观看| 99精品国产在热久久| 亚洲精品久久区二区三区蜜桃臀 | 999精品网| 亚洲天堂男人的天堂| av片免费播放| 91成人免费在线| 麻豆一区二区三区精品视频| 欧美国产综合色视频| 插我舔内射18免费视频| 久久99日本精品| 妞干网在线免费视频| 国自产拍偷拍福利精品免费一| 亚洲国产精品视频一区| 日韩激情毛片| 国产 高清 精品 在线 a| 欧美亚洲二区| 国产ts一区二区| 国产直播在线| 欧美多人爱爱视频网站| 黄色av电影在线播放| 国产一级久久| 91视频一区二区三区| 欧美一区二区三区男人的天堂 | 九九热这里有精品视频| 国产69精品久久久久777| 日日噜噜夜夜狠狠| 久久国产直播| 黄色片久久久久| 亚洲精品人人| www.亚洲视频.com| 一区二区三区中文| 樱花www成人免费视频| 国产区精品区| 免费观看成人在线| 久久365资源| 国产视频精品网| 粉嫩一区二区三区四区公司1| 亚洲a一级视频| 水蜜桃色314在线观看| 国产成人免费视频网站视频社区| 国产精品久久久久久久久久东京 | 欧美三级电影一区二区三区| 亚洲一品av免费观看| 欧美女优在线观看| 国产午夜精品视频| 黄色片在线免费观看| 国产亚洲精品久久久久久牛牛| 性xxxxbbbb| 日韩毛片中文字幕| 男人天堂网在线观看| 亚洲欧洲av一区二区| 国模精品一区二区| 国产一区二区三区精品久久久| 国产一区二区影视| 这里精品视频免费| 免费的黄网站在线观看| xvideos亚洲| 午夜在线激情影院| 国语自产精品视频在线看| free性m.freesex欧美| 欧美诱惑福利视频| 成人久久网站| 91日韩在线视频| 国产精品2023| 欧洲av一区| 日韩免费视频| 欧美大黑帍在线播放| 亚洲精品孕妇| 黄色在线视频网| 国产久卡久卡久卡久卡视频精品| 欧美xxxxx少妇| 久久蜜桃av一区精品变态类天堂| www.99热| 一区二区三区蜜桃| 天堂中文字幕在线观看| 欧美日韩一二区| www.com欧美| 亚洲男人天堂2023| 老司机午夜在线视频| 久久久视频在线| 国产精品字幕| 99蜜桃在线观看免费视频网站| 丝袜久久网站| 一区二区三区三区在线| 激情久久久久| 91人人澡人人爽人人精品| 国产精品亚洲午夜一区二区三区 | 中文字幕精品一区| 日本福利视频导航| fc2在线中文字幕| 日韩日本欧美亚洲| 国产在线美女| 91美女片黄在线观| 日韩高清影视在线观看| 黄色网址在线免费看| 亚洲一区成人| 亚洲少妇一区二区| 国产农村妇女毛片精品久久麻豆 | 亚洲综合电影一区二区三区| 伊人色在线观看| 99久久久久久| 波多野结衣家庭教师| 在线观看国产一区二区| 性少妇videosexfreexxx片| 亚洲欧美制服第一页| 男人添女人下部高潮视频在线观看 | 日本一区二区在线视频观看| 欧美亚洲不卡| 182午夜在线观看| 久久综合九色综合欧美就去吻| 国产一区二区视频在线观看免费| 91极品美女在线| 天堂网在线中文| 久久国产精品久久精品| 黄色欧美视频| 欧美极品jizzhd欧美| 亚洲激情一区| 欧美xxxx黑人| 日韩理论片网站| 最近中文字幕免费在线观看| 日韩精品亚洲视频| 91av久久| 国产精品乱子乱xxxx| 欧美成人精品| 亚洲一区二区福利视频| 亚洲国产高清在线观看视频| 日日夜夜综合网| 亚洲第一av网站| free性护士videos欧美| 成人欧美一区二区三区视频xxx| 亚洲电影在线一区二区三区| 亚洲36d大奶网| 国产精品污www在线观看| 中文字幕在线日本| 亚洲色图第三页| 另类专区亚洲| 日韩欧美激情一区二区| 视频在线观看91| 熟女少妇一区二区三区| 欧美性高潮床叫视频| 四虎影院在线播放| 91高潮在线观看| 伊人久久大香线蕉av不卡| 久久网站免费视频| 久久婷婷久久一区二区三区| 九九热在线免费观看| 亚洲欧美日韩高清| 蜜桃精品在线| 正在播放欧美视频| 小向美奈子av| 欧美午夜视频网站| 成人h小游戏| 国产精品自产拍在线观看中文| 日韩片欧美片| 四川一级毛毛片| 亚洲高清在线精品| 日韩欧美在线观看一区二区| 日本亚洲欧美成人| 成人中文在线| 中文字幕55页| 午夜激情久久久| 邻家有女韩剧在线观看国语| 国产精品免费一区豆花| 首页国产精品| 亚洲 自拍 另类 欧美 丝袜| 亚洲一区二区三区四区五区中文| 日本高清视频免费看| 日韩av三级在线观看| 日韩欧美一区二区三区免费看| 亚洲高清av一区二区三区| 亚洲无线码一区二区三区| 青青草av免费在线观看| 国产精品视频在线播放| 欧美日韩一区自拍| 亚洲天堂久久新| 欧美一区二区三区思思人| 成人免费观看在线观看| 天堂社区 天堂综合网 天堂资源最新版| 精品午夜一区二区三区在线观看| 九九热国产精品视频| 亚洲欧美日韩精品久久奇米色影视| 成人免费黄色| 日韩a∨精品日韩在线观看| 国产午夜精品一区二区三区视频 | 一呦二呦三呦精品国产| 少妇熟女一区二区| 91免费版在线| 一级淫片免费看| 456国产精品| 久久久久免费av| 人妻无码一区二区三区| 91麻豆精品91久久久久久清纯| 国产理论在线| 亚洲成人黄色在线观看| 日日夜夜综合网| 国产一区二区三区网站| 一区二区网站| 日本激情视频在线播放| 午夜伊人狠狠久久| 黄色精品免费看| 秋霞毛片久久久久久久久|