网易首页 > 网易号 > 正文 申请入驻

为什么API访问令牌绝不该出现在浏览器里?

0
分享至

假如你已经用 Next.js 搭好了一个应用,它跑在一个域名下,API 接口在另一个域名。登录没问题,仪表盘数据也正常填充,一切看起来井然有序。直到某天你无意间打开浏览器的 Network 面板,才发现那个访问令牌就躺在请求头里,以明文的方式,被浏览器自动发送出去。

从那一刻起,页面上的每一行 JavaScript 都能读到它。不仅仅是你的业务代码,上周刚加进来的分析脚本、那十二个你从未点开过的传递依赖项,甚至某个 XSS 漏洞趁虚而入时,都能拿到这根钥匙。可你从未真正做过这个决定——它只是“顺手”发生了,因为直接在组件里调用 API 是阻力最小的路径,而且一直没人提出异议。

把这个“顺手”的方式写成代码,大概长这样:

// 一个客户端组件直接请求你的 API'use client';export function Profile() {useEffect(() => {fetch('https://api.example.com/me', {headers: { authorization: `Bearer ${token}` },.then((r) => r.json()).then(setProfile);}, []);}

这短短几行,实际上替你做了一连串你未必想要的决定。令牌现在在 JavaScript 里,原本 HttpOnly Cookie 能提供的保护就荡然无存了。请求是跨域的,于是你不得不应付 CORS 带来的整套麻烦:预检请求、一个需要持续维护的允许来源列表、Access-Control-Allow-Credentials 头,还有那种隐约的担忧——你可能已经把权限开得比预期更大了。因为请求是从浏览器直接发出,任何一个打开开发者工具的人都能看到 API 的基础地址、路由结构以及认证方式。相当于你把后端的一幅清晰地图,拱手交给每一位访客。

最隐蔽的地方在于,这一切都不会报错。演示环境跑得好好的,生产环境也毫无异常,代码评审也安然通过。它就是那样静悄悄地待着,成为一个负债项,直到某一天突然不再沉默。

正确的边界其实只需要画一根线:浏览器只与你的 Next.js 服务器对话,而 Next.js 服务器才去和 API 通信。这就是 Backend-for-Frontend 模式(BFF)的核心:

浏览器 -> Next.js (Server Actions / Route Handlers) -> API

Next.js 的 App Router 本质上就是为这条路设计的。Server Actions 和 Route Handlers 都运行在服务端,那里可以读取会话 Cookie,令牌永远不需要离开服务器。浏览器手里只握着一个 HttpOnly 的会话 Cookie,除此之外再无其他。它不知道 API 的网址,也读不到令牌的内容。因为所有请求现在都变成同源的了,CORS 的烦恼就此消失。

这不是什么新奇的构想,它本来就是正确的做法。真正棘手的是,如果全部手工去搭建,代价会高到让人退缩。

一旦把 fetch 调用移到服务端,那些枯燥的样板代码就会立刻涌现出来。你必须做这么几件事:从进入的请求中读取会话 Cookie 并原样转发给 API;在登录时接收 API 返回的 Set-Cookie,再以 Next.js 源的名义重新下发;对 JSON 格式的请求体设置 Content-Type: application/json,但如果是 FormData 或者文件上传又绝不能这么干;碰到 429 状态码要去解析 Retry-After 头;还要考虑当 API 完全宕机时该怎样优雅降级,而不是把原始的传输错误直接泼到页面上。

这些工作一项项摊开,就把 BFF 变成了最容易在项目初期被跳过的部分。但一旦跳过去,那个看似无害的客户端调用,就会一直在生产环境里等着,直到某个不起眼的依赖、某次不经意的审查疏漏,或者一个足够确定的外部攻击,让它从沉默的负债项变成公开的漏洞。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
难以置信,北京协和证实:40岁后男性最优运动,并非跑步撸铁

难以置信,北京协和证实:40岁后男性最优运动,并非跑步撸铁

华庭讲美食
2026-06-21 15:26:10
库库雷利亚女友:她是皇马死忠,却爱上巴萨青训出身的他,如今陪他加盟皇马

库库雷利亚女友:她是皇马死忠,却爱上巴萨青训出身的他,如今陪他加盟皇马

体坛观察猿
2026-07-20 00:17:55
西班牙夺冠现场,球员手里的中国手机抢了戏!荣耀Robot Phone世界杯决赛意外出圈

西班牙夺冠现场,球员手里的中国手机抢了戏!荣耀Robot Phone世界杯决赛意外出圈

泡泡网
2026-07-20 11:03:07
《生活大爆炸》巅峰期他坦言“很痛苦”:再多的钱也不会做了

《生活大爆炸》巅峰期他坦言“很痛苦”:再多的钱也不会做了

热搜摘要官
2026-07-21 01:04:00
日本局势突变,82比0结果一出,不用中国审判,高市内阁被催辞职

日本局势突变,82比0结果一出,不用中国审判,高市内阁被催辞职

军情观察家
2026-07-20 23:53:14
太甜了!亚马尔女友赛后主动亲吻 两人抱大力神杯贴贴合影

太甜了!亚马尔女友赛后主动亲吻 两人抱大力神杯贴贴合影

Emily说个球
2026-07-20 16:37:23
毒过砒霜!无解药!仅吃半根,一男子被送医!医生紧急提醒,近期餐桌常见

毒过砒霜!无解药!仅吃半根,一男子被送医!医生紧急提醒,近期餐桌常见

南方都市报
2026-07-20 09:42:14
新冠确诊的人越来越多?医生再次强调:宁可打打牌,也别做这4事

新冠确诊的人越来越多?医生再次强调:宁可打打牌,也别做这4事

医学原创故事会
2026-07-20 12:54:32
三国接连断供中国气源,中方一纸禁令反手绝杀,这回轮到外企慌了

三国接连断供中国气源,中方一纸禁令反手绝杀,这回轮到外企慌了

财经保探长
2026-07-19 21:19:11
中国要提防巴基斯坦,看看他们的小孩,随口就:“秦腔穷”!

中国要提防巴基斯坦,看看他们的小孩,随口就:“秦腔穷”!

经纬戎韬
2026-07-20 21:33:05
金球奖最新概率:32岁凯恩重返第1!近5成可能获奖,罗德里升第3

金球奖最新概率:32岁凯恩重返第1!近5成可能获奖,罗德里升第3

我爱英超
2026-07-20 07:53:48
成吉思汗在屠城时,有3种人他不杀,这才是让敌人最害怕的

成吉思汗在屠城时,有3种人他不杀,这才是让敌人最害怕的

鹤羽说个事
2026-06-25 08:24:14
中国驻俄罗斯大使馆就3名中国公民在莫斯科州无人机袭击中受伤事答问

中国驻俄罗斯大使馆就3名中国公民在莫斯科州无人机袭击中受伤事答问

澎湃新闻
2026-07-20 23:55:08
精神小妹的生活原来是这样的!网友:终于知道她们为啥都这么瘦了

精神小妹的生活原来是这样的!网友:终于知道她们为啥都这么瘦了

深度报
2026-02-11 23:35:03
钱再多有什么用?女排教父袁伟民现状,给所有中老年人提了个醒

钱再多有什么用?女排教父袁伟民现状,给所有中老年人提了个醒

最美的开始
2026-07-17 20:16:23
9个假故事,骗了中国整整一代人,现在终于真相大白了

9个假故事,骗了中国整整一代人,现在终于真相大白了

细说职场
2026-07-20 14:03:24
台湾统一的风向变了:若赖清德由独转统,或许能够成就统一功绩

台湾统一的风向变了:若赖清德由独转统,或许能够成就统一功绩

军机Nova
2026-07-21 00:20:46
曼联官宣!第4笔签约!热刺18岁边锋加盟,新孙兴慜,这步棋太绝

曼联官宣!第4笔签约!热刺18岁边锋加盟,新孙兴慜,这步棋太绝

卡灵顿分析师
2026-07-20 20:36:49
真人生赢家!19岁双冠王,每次夺冠女友都不同,情史比赛场更精彩

真人生赢家!19岁双冠王,每次夺冠女友都不同,情史比赛场更精彩

体坛老球迷
2026-07-20 16:08:07
奥莱报:奥塔门迪希望尽快为河床队登场,可能放弃世界杯休假

奥莱报:奥塔门迪希望尽快为河床队登场,可能放弃世界杯休假

懂球帝
2026-07-21 01:06:05
2026-07-21 01:35:00
灰度测试中
灰度测试中
生活正在重构,目前还在灰度测试阶段,暂不全量发布。
301文章数 50关注度
往期回顾 全部

科技要闻

网易科技"未来大奖2026上半年AI榜单"揭晓

头条要闻

媒体:驱逐所有以色列人 马来西亚对以强硬几乎零成本

头条要闻

媒体:驱逐所有以色列人 马来西亚对以强硬几乎零成本

体育要闻

65岁肌肉男,世界杯最年长冠军主帅

娱乐要闻

谢霆锋发文确认父亲谢贤去世 享年89岁

财经要闻

AI开始挤泡沫

汽车要闻

综合续航超1600km 2027款星途ES上市置换价16.99万起

态度原创

本地
时尚
亲子
手机
公开课

本地新闻

2026暑期旅行新灵感:跟着影视去旅行

夏天才最适合穿连衣裙,看看这些裙装穿搭,舒适优雅又清新

亲子要闻

宝蓝和爸爸玩过家家,扮演美食摊主,比赛看谁的生意好~

手机要闻

顶配售价预估15999元!有网友抢先预订荣耀Robot Phone 1TB版

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版