基于令牌的身份验证是确认用户或设备身份的一种方式。它依赖于检查相关实体是否拥有先前发行的令牌。
阅读本文后,您将能够:
复制文章链接
基于令牌的身份验证是通过检查令牌来验证身份的过程。在访问管理中,服务器使用令牌身份验证来检查用户、API、计算机或其他服务器的身份。
令牌是由受信任的来源发行的象征性物品——就像执法人员携带由其机构颁发的徽章,以使其权威合法化。令牌可以是物理的(如 USB 硬密钥)或数字的(计算机生成的消息或数字签名)。
基于令牌的身份验证可以指几个不同的过程:
通过物理令牌进行身份验证通常发生在用户登录过程中。用户必须证明他们拥有其他人没有的物品。他们可以通过输入物品显示的代码、通过 USB 将物品连接到设备、通过蓝牙连接物品或其他几种方法来证明这一点。与输入密码证明用户知道其他人不了解的内容类似,使用令牌证明用户拥有只有该用户才有的物品。
有两种用于此类身份验证的令牌:软令牌和硬令牌。
Web 令牌是数字的,而不是实际物品。它是从服务器发送到客户端并由客户端临时存储的消息。客户端在发送到服务器的后续请求中包含令牌的副本,以确认客户端的身份验证状态。
物理令牌身份验证会在登录过程中验证身份,而 Web 令牌是作为成功登录的结果发布的。它们使已经登录的会话保持活动状态。
但是,将 Web 令牌用于用户会话并非总是理想之选。会话许多开发人员都支持使用 cookie。Web 令牌可能更适合用于 API 端点身份验证或验证服务器之间的连接,而不是服务器和客户端之间的连接。
在 Web 开发中,“Web 令牌”几乎总是指 JSON Web 令牌。JSON Web 令牌 (JWT) 是用于创建包含 JavaScript 对象表示法 (JSON) 数据的数字签名 Web 令牌的标准。服务器创建一个令牌来证明客户端的身份并将其发送给客户端。JWT 使用数字签名来证明令牌是合法的。
JWT 包括三个组件:
JWT 有时用于让用户在登录 Web 应用程序后保持身份已得到验证。但是,cookie 也可以用于此目的。
cookie 是服务器发送给客户端的小数据文件。当用户登录 Web 应用程序时,服务器会生成一个 cookie 并将其发送到客户端设备(通常是用户的计算机或智能手机)。客户端设备将 cookie 存储在浏览器的缓存中,并在未来对服务器的请求中包含 cookie 的副本,类似于 JWT 的使用方式。在用户退出后,浏览器就会删除 cookie。
与 JWT 相比,cookie 文件要小得多,因为除了有效负载之外,JWT 还包括标头和数字签名。相比之下,cookie 仅包含有效负载。这使得它们在 Web 性能和带宽方面更加高效。
JWT 并未针对性能进行优化,因为它们包含数字签名,可确保其内容未被篡改。但是,如果 Web 应用程序使用 HTTPS(应该如此),那么 cookie 无论如何都应该是防篡改的。HTTPS 将对 cookie 以及在客户端和服务器之间交换的所有其他 HTTP 数据进行加密和签名,并且攻击者不应该能够在传输过程中伪造或拦截它,除非他们执行在途攻击。
JWT 更适合 API 和服务器到服务器的连接。这样的用途不需要那么大的规模:一个 Web 应用程序可能会获得一百万用户,但它不会拥有一百万个 API 连接。这减少了对性能和带宽的潜在影响。但是,其他身份验证方法(例如双向 TLS)有时对 API 更有效——了解有关双向 TLS 的更多信息。