理解 JWT(Json Web Token)

发布于 2022-07-21 08:37:07 字数 2226 浏览 216 评论 0

JWT 是 Json Web Token 的缩写,是一种轻量级的用户与服务器信息传递规范,相应规范的标准可以在 RFC 7519 查看,你也可以在网站 jwt.io上看到更详细的介绍。

jwt 本质上是一个加密过的字符串,由 header(头部)、payload(载荷)、signature(签名)三部分组成,并通过符号 . 对这三部分进行拼接,一个jwt类似于 xxxxx.yyyyy.zzzzz

Header

Header 部分描述了相应的 JWT 的类型和相应的签名算法,如下:

{
  "alg": "HS256",
  "typ": "JWT"
}

payload

{ "iss": "Online JWT Builder",
  "iat": 1416797419,
  "exp": 1448333419,
  "aud": "www.example.com",
  "sub": "jrocket@example.com",
  "GivenName": "Johnny",
  "Surname": "Rocket",
  "Email": "jrocket@example.com",
  "Role": [ "Manager", "Project Administrator" ]
}

iss:该JWT的签发者,是否使用是可选的;
sub:该JWT所面向的用户,是否使用是可选的;
aud:接收该JWT的一方,是否使用是可选的;
exp(expires):什么时候过期,这里是一个Unix时间戳,是否使用是可选的;
iat(issued at):在什么时候签发的(UNIX时间),是否使用是可选的;

其他还有:

nbf(Not Before):如果当前时间在 nbf 里的时间之前,则 Token 不被接受;一般都会留一些余地,比如几分钟;,是否使用是可选的;

对上面的信息进行 base 编码得到了对应的字符串

signature

对于 header 和 payload 中的得到的字符串进行拼接后,使用加密算法加密,加密的时候需要提供相应的 密钥(secre),加密后得到的字符串拼接后就得到了完整的 JWT

存储 JWT

token的存储是客户端控制的,客户端可以选择存储在 localstorage 或者 cookie 中,为了安全,可以存储在 cookie 中,并设置 httponly

前端如何在请求的时候发送 token

token可以通过 cookie,header,post的body发送,关键是需要前后端上商量好,比较方便实现的就是 header 和 cookie,post的body发送应该尽量在 https 在实现,这样保证安全性

JWT如何防止被别人获取

返回 JWT 时记录用户的 ip

JWT的优点

可防护 CSRF 攻击
不在服务端保存会话消息,减轻了服务器负担,易于拓展
方便跨域
对于无法使用 cookie 的场景,仍然有效

JWT 注销问题

因为服务端没有存储会话信息,所以注销无法像 session 一样,直接在服务端清除即可,可以在 redis 层做一个标记,标记相应的 token 已经失效

参考

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

晒暮凉

暂无简介

0 文章
0 评论
25 人气
更多

推荐作者

qq_aHcEbj

文章 0 评论 0

寄与心

文章 0 评论 0

13545243122

文章 0 评论 0

流星番茄

文章 0 评论 0

春庭雪

文章 0 评论 0

潮男不是我

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文