新手心得:登录一次之后,网站是怎么认出你的

举报
yd_273029183 发表于 2026/11/10 12:21:26 2026/11/10
【摘要】 你有没有想过,登录一个网站之后,点开十几个页面,它一次密码都没再问过,它到底是怎么认出你的?把它想象成音乐节入场。进场的时候,检票口是最严的:你出示身份证、核对票根,确认你就是你。这一关过了,工作人员会在你手腕上盖一个章,特殊油墨,现场的人一眼就能认出来,别人仿不出来。从这一刻起,你在园区里走到哪个舞台、进哪个帐篷,工作人员只看一眼手腕上的章,不会再让你掏一次身份证。登录令牌(token)就...

你有没有想过,登录一个网站之后,点开十几个页面,它一次密码都没再问过,它到底是怎么认出你的?

把它想象成音乐节入场。

进场的时候,检票口是最严的:你出示身份证、核对票根,确认你就是你。这一关过了,工作人员会在你手腕上盖一个章,特殊油墨,现场的人一眼就能认出来,别人仿不出来。从这一刻起,你在园区里走到哪个舞台、进哪个帐篷,工作人员只看一眼手腕上的章,不会再让你掏一次身份证。

登录令牌(token)就是那个章。

你输入账号密码、通过验证的那一刻,服务器会发给你一串字符,这就是令牌。之后你每次发请求,浏览器都会顺手把它带上,服务器一看就知道这个人已经验过身份了,不用再问密码。

那服务器怎么知道令牌是真的、不是你自己伪造的?最常见的答案叫 JWT。

一个 JWT 长得像三段乱码,用两个点连在一起:前面一段、中间一段、后面一段。前两段分别写着"这张令牌用的什么算法"和"你是谁、什么时候过期"这类信息,都是用一种叫 Base64URL 的方式编码的——注意,是编码,不是加密。任何人拿到令牌都能解开前两段读到里面的内容,所以千万别把密码、手机号这类敏感信息往令牌里塞。

真正起作用的是第三段:签名。服务器发令牌的时候,会拿只有自己知道的密钥,把前两段的内容按约定算法算一遍,得到一个签名贴在最后。你每次拿着令牌回来,服务器就用同一把密钥重新算一次,对得上,说明内容一个字都没被改过;对不上,哪怕你只改了一个字母,也会被当场识破。这就是为什么令牌能防篡改:内容可以公开,签名仿不出来。

为什么不用老办法呢?老办法叫会话(session):服务器在自己那边记一本账,浏览器只拿一个编号,每次来先翻账本。账本法有个麻烦——服务器一多,账本就得几台机器共享,扩容很费劲。令牌是"自包含"的,需要的信息都写在令牌自己身上,服务器不用翻账本,收到就能验,几台服务器轮流接待你也没问题。这也是它在微服务和手机 App 里特别常见的原因。

不过令牌也有它的短板,知道这些才能不踩坑。

第一,令牌一旦发出去,服务器就管不住它了。传统会话可以随时把账本上那一行划掉,等于立刻注销;令牌是自包含的,服务器手里没有开关,注销往往要等它自己过期,或者另外维护一份黑名单。所以很多系统把令牌的有效期设得很短,过期后用一张"刷新令牌"换新的,相当于章只能管两小时,到期回检票口重盖。

第二,令牌丢了就等于钥匙丢了。谁捡到它,谁就能冒充你,直到它过期为止。所以令牌一定要走加密连接传输,也别随手把它贴到聊天记录或者公开的截图里。

第三,解开令牌不等于验证令牌。网上有很多工具能一键解码 JWT,解出来只是读到了内容,离"可信"还差一个验签名的步骤。

对新手来说,记住三句话就够了:登录只验一次,之后靠令牌认人;令牌的内容是公开可读的,靠签名防篡改;令牌管不住吊销,所以有效期越短越安全。下次再看到一串点分三段的乱码,你就知道,手腕上那个章长什么样了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。