JWT(json web token)

例如,我是个盲人,而且听力也不好。你上周帮我买了午餐,现在我需要你的收款账号,把钱还给你。如果我询问你的账号,但是其他人高呼他们的账号,由于我把别人的账号误认为是你的,我可能会不小心把钱打给别人。

JWT 旨在防止这种情况发生。JWT 提供了一种简单的方法,在彼此传递数据时,验证是由谁先创建了数据。

所以,像上述的例子,即使我收到了超过 100 万个 JWT 返回的账号信息,我也很容易可以辨别出来哪个真实来自于你。

JWT 如何运行?

JWT 是 JSON 格式的被加密了的字符串。

JWT 的核心是密钥,就是 JSON 数据。这是你关心的,并希望安全传递出去的数据。JWT 如何做到这一点,并使你信任它,就是加密签名。

比如说,我写了一封信,当我署名这封信时,意味着只要读过这封信的人,都知道是我写了这封信。而且我的签名是独一无二的,所以不会被怀疑真实性。加密签名的方式大致相同,JWT 有两种加密方式:对称加密和非对称加密,两种方式有同等的效用。
JWT 内容加密

其实,JWT 的内容(内部的 JSON 数据)通常是不加密的。这意味着,即使没有密钥,也可以查看 JWT 内的数据。JWT 默认并不会加密你的数据,它只是帮助你验证是你信任的一方创建了它。

如果你确实需要加密 JWT 内容,可以使用 JWE 进行加密,但这种做法并不常见。请确保使用了正确的方法。
如今人们是如何使用 JWT 的?

JWT 最常见的用途是身份验证。有大量的 Web 安全库使用 JWT 创建会话控制,API 令牌等。

这种做法通常是,当需要对网站/ API 进行身份验证时,服务器生成一个包含用户 ID 的 JWT,以及其它一些关键性的信息,然后再将其发送给浏览器/客户端等,存储为会话令牌。

例如,当用户访问网站上的另一个页面时,浏览器会自动将该 JWT 发送到服务器,服务器验证 JWT 确认和最初创建的令牌相同,然后允许用户执行后续的操作。

从理论上看,还不错,因为:

    当服务器收到 JWT 时,可以验证其是否是合法的,是否是信任用户的令牌
    可以在服务器本地验证,而不需要任何其它的网络请求,与数据库的通信等。这可能令管理会话更高效,因为无需从数据库(缓存)加载用户信息,只需要在本地运行一小部分代码。这可能是人们喜欢用 JWT 的最大原因。

似乎很棒,既可以提高 Web 应用的性能,又可以减少缓存服务器和数据库服务器的负载,提供更好的体验。另外你还可以在 JWT 中存储用户权限信息、用户个人信息等等更多的额外信息进一步减少数据库压力。

什么时候使用 JWT?

JWT 虽然对于大多数网站都没有用,但是有几种情况它是很有用的。

如果你正在构建从服务器到服务器或客户端到服务器(如:移动应用 APP 或单页面应用)的 API 服务,那么使用 JWT 是非常明智的。比如:

    你的客户端需要通过 API 进行身份验证,并返回 JWT
    然后,客户端使用返回的 JWT 经过身份验证去请求其它的 API 服务
    这些其它 API 服务通过客户端的 JWT 验证客户端是可信的,并且可以执行某些操作无需再次验证

对于这类 API 服务,JWT 非常适合,因为客户端需要频繁进行请求,并且权限是可控的,通常认证数据以无状态方式持久存在,不需要过多依赖用户信息。

如果你正在构建的应用类似单点登录或 OpenID Connect 认证,JWT 同样十分适合,就是实现一种通过第三方验证用户的方法。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值