什么是基于令牌的验证?

基于令牌的身份验证是确认用户或设备身份的一种方式。它依赖于检查相关实体是否拥有先前发行的令牌。

学习目标

阅读本文后,您将能够:

  • 定义基于令牌的身份验证
  • 描述两种基于令牌的身份验证类型
  • 针对 Web 应用程序比较令牌身份验证与基于 cookie 的身份验证

相关内容


想要继续学习吗?

订阅 TheNET,这是 Cloudflare 每月对互联网上最流行见解的总结!

参阅 Cloudflare 的隐私政策,了解我们如何收集和处理您的个人数据。

复制文章链接

什么是基于令牌的验证?

基于令牌的身份验证是通过检查令牌来验证身份的过程。在访问管理中,服务器使用令牌身份验证来检查用户、API、计算机或其他服务器的身份。

令牌是由受信任的来源发行的象征性物品——就像执法人员携带由其机构颁发的徽章,以使其权威合法化。令牌可以是物理的(如 USB 硬密钥)或数字的(计算机生成的消息或数字签名)。

基于令牌的身份验证可以指几个不同的过程:

  1. 通过物理令牌验证身份。这是一种广泛使用的登录身份验证因素:用户在登录帐户或设备时被要求出示他们的令牌。(什么是身份验证?中对身份验证因素进行了更详细的描述。)
  2. 通过 Web 令牌重新确认身份。Web 令牌是纯数字的。Web 令牌由服务器生成并发送到客户端。令牌附加到每个客户端请求,以便服务器知道客户端的身份并知道客户端可以访问哪些数据。此类基于令牌的身份验证与基于 cookie 的身份验证形成对比,后者是完成相同事情的类似方式——在下面了解更多信息。

使用物理令牌的身份验证如何运作?

通过物理令牌进行身份验证通常发生在用户登录过程中。用户必须证明他们拥有其他人没有的物品。他们可以通过输入物品显示的代码、通过 USB 将物品连接到设备、通过蓝牙连接物品或其他几种方法来证明这一点。与输入密码证明用户知道其他人不了解的内容类似,使用令牌证明用户拥有只有该用户才有的物品。

有两种用于此类身份验证的令牌:软令牌和硬令牌。

  • 软令牌包括输入发送到设备的密码或消息,以证明拥有该设备。这通常以通过短信发送到智能手机的代码的形式。
  • 硬令牌是用户直接连接到电脑或移动设备上进行登录的硬件物品。

通过 Web 令牌进行的身份验证如何运作?

Web 令牌是数字的,而不是实际物品。它是从服务器发送到客户端并由客户端临时存储的消息。客户端在发送到服务器的后续请求中包含令牌的副本,以确认客户端的身份验证状态。

物理令牌身份验证会在登录过程中验证身份,而 Web 令牌是作为成功登录的结果发布的。它们使已经登录的会话保持活动状态。

但是,将 Web 令牌用于用户会话并非总是理想之选。会话许多开发人员都支持使用 cookie。Web 令牌可能更适合用于 API 端点身份验证或验证服务器之间的连接,而不是服务器和客户端之间的连接。

什么是 JSON Web 令牌 (JWT)?

在 Web 开发中,“Web 令牌”几乎总是指 JSON Web 令牌。JSON Web 令牌 (JWT) 是用于创建包含 JavaScript 对象表示法 (JSON) 数据的数字签名 Web 令牌的标准。服务器创建一个令牌来证明客户端的身份并将其发送给客户端。JWT 使用数字签名来证明令牌是合法的。

JWT 包括三个组件:

  • 标头:标头提供了有关 JWT 的信息——JWT 是什么类型的令牌以及用于对其进行数字签名的方法。
  • 有效负载:任何 JSON 数据都可以放在这里。用于身份验证的 JWT 有效负载会在其中包含有关用户身份的声明。它们还可以包括有关用户、服务器或 API 端点权限的信息。
  • 数字签名:签名采用加密技术,使用密钥对标头和有效负载进行签名,以确保它们包含的数据是合法的。可以将数字签名想象成药罐上的防篡改密封。

基于令牌 (JWT) 的身份验证与基于 cookie 的身份验证

JWT 有时用于让用户在登录 Web 应用程序后保持身份已得到验证。但是,cookie 也可以用于此目的。

cookie 是服务器发送给客户端的小数据文件。当用户登录 Web 应用程序时,服务器会生成一个 cookie 并将其发送到客户端设备(通常是用户的计算机或智能手机)。客户端设备将 cookie 存储在浏览器的缓存中,并在未来对服务器的请求中包含 cookie 的副本,类似于 JWT 的使用方式。在用户退出后,浏览器就会删除 cookie。

与 JWT 相比,cookie 文件要小得多,因为除了有效负载之外,JWT 还包括标头和数字签名。相比之下,cookie 仅包含有效负载。这使得它们在 Web 性能带宽方面更加高效。

  • Web 性能:cookie 加载速度更快,因为它包含的信息更少——就好比照片的下载速度比视频的下载速度更快。
  • 带宽:由于 cookie 更小,它们减少了需要在客户端和服务器之间通过网络传递的数据总量。与用于 Web 应用程序运营商的 JWT 相比,这可能会节省成本。

JWT 并未针对性能进行优化,因为它们包含数字签名,可确保其内容未被篡改。但是,如果 Web 应用程序使用 HTTPS应该如此),那么 cookie 无论如何都应该是防篡改的。HTTPS 将对 cookie 以及在客户端和服务器之间交换的所有其他 HTTP 数据进行加密和签名,并且攻击者不应该能够在传输过程中伪造或拦截它,除非他们执行在途攻击

JWT 更适合 API 和服务器到服务器的连接。这样的用途不需要那么大的规模:一个 Web 应用程序可能会获得一百万用户,但它不会拥有一百万个 API 连接。这减少了对性能和带宽的潜在影响。但是,其他身份验证方法(例如双向 TLS)有时对 API 更有效——了解有关双向 TLS 的更多信息